【发布时间】:2012-01-11 14:19:20
【问题描述】:
我一直在学习线程锁定,但我没有找到解释为什么创建一个典型的 System.Object、锁定它并执行锁定期间所需的任何操作来提供线程安全?
示例
object obj = new object()
lock (obj) {
//code here
}
起初我认为它只是在示例中用作占位符,并且打算与您正在处理的类型交换。但我发现 Dennis Phillips 指出的例子与实际使用 Object 实例没有什么不同。
因此,以需要更新私有字典为例,锁定 System.Object 的实例与实际锁定字典相比,如何提供线程安全(我知道在这种情况下锁定字典可能会出现同步问题) ? 如果字典是公开的呢?
//what if this was public?
private Dictionary<string, string> someDict = new Dictionary<string, string>();
var obj = new Object();
lock (obj) {
//do something with the dictionary
}
【问题讨论】:
-
如果您担心
dictionary被公开,请编写(或复制)Dictionary包装器,将所有功能包装在lock中。有关示例和说明,请参阅What's the best way of implementing a thread-safe Dictionary in .NET?。或者只使用ConcurrentDictionary
标签: c# multithreading locking