环境: 3 个 Web 服务 2 个在同一个池中 1 个在不同的应用程序池中。
他们都有相同的代码试图访问非线程安全的东西,比如他们写入的文件。
我尝试以相同的方式为每个 Web 服务锁定此代码。我不确定 lock 关键字是否在做我想做的事情。
我尝试的一个锁是在每个网络服务中:
string stringValue
lock (stringValue)
我尝试的另一个锁是:
lock (typeof(MyWebServiceClass))
这些锁是否会阻止在使用文件时同时写入文件?在这种情况下,有多个客户端访问这些 Web 服务中的每一个。
最佳答案
您需要一个名为 Mutex
的跨应用程序池/进程锁定:
C# lock
关键字是 Monitor.Enter()
的语法糖, Monitor.Exit()
try/finally
中的方法调用堵塞。 Monitor
是用于进程内锁定的轻量级(完全托管)同步原语。
A Mutex
另一方面可以是本地的或全局的(同一台机器上的跨进程) - 全局互斥锁,也称为命名互斥锁,在整个操作系统中都是可见的,可用于同步多个线程应用程序域或进程。另见 MSDN .
关于c# - 我真的锁定了这些东西吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6650772/