我真的锁定了这个东西

zac*_*ary 4 .net c# multithreading thread-safety

环境:3个Web服务2位于不同应用程序池中的同一池1中.

他们都有相同的代码试图访问一些非线程安全的东西,比如他们写的文件.

我尝试以相同的方式为每个Web服务锁定此代码.我不确定lock关键字是否正在执行我想要的操作.

我尝试的一个锁是每个Web服务中的这个:

string stringValue
lock (stringValue)
Run Code Online (Sandbox Code Playgroud)

我尝试的另一个锁是:

lock (typeof(MyWebServiceClass))
Run Code Online (Sandbox Code Playgroud)

这些锁是否会阻止在文件使用时同时写入文件?在这种情况下,有多个客户端访问这些Web服务.

Bro*_*ass 10

您需要一个named Mutex来锁定应用程序池/进程:

C#的lock关键字是语法糖Monitor.Enter(),Monitor.Exit()在一个方法调用try/finally块.Monitor是一个轻量级(完全管理)同步原语,用于进程内锁定.

Mutex另一方面,A 可以是本地的(也可以是同一台机器上的进程) - 全局互斥(也称为命名互斥)在整个操作系统中都是可见的,可用于同步多个应用程序域或进程中的线程.另请参阅MSDN.