c# - 我真的锁定了这些东西吗

标签 c# .net multithreading thread-safety

环境: 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/

相关文章:

c# - 如何将 XslCompiledTransform 的输出获取到 XmlReader 中?

.net - 是否有 “free” 替代 .NET Reflector?

java - 多线程斐波那契

C 服务器和客户端之间的发送功能不起作用

c# - 在显示两列的 WPF 组合框中搜索

c# - 按反射排序比按成员排序更快?

c# - 以编程方式测试 asp.net 页面

c# - 哪种聚类算法适用于不知道k的一维列表?

c# - 我想创建一个安装在远程服务器上的应用程序安装程序

java - 我可以在 CompletableFuture 上多次使用 thenCombine/thenCompose 吗?