<分区>
Possible Duplicate:
Difference between lock(locker) and lock(variable_which_I_am_using)
在我见过的所有“线程安全”代码示例中,它们都锁定在一个单独的虚拟对象上。为什么不能直接对有问题的数据执行锁定?
<分区>
Possible Duplicate:
Difference between lock(locker) and lock(variable_which_I_am_using)
在我见过的所有“线程安全”代码示例中,它们都锁定在一个单独的虚拟对象上。为什么不能直接对有问题的数据执行锁定?
最佳答案
锁定一个单独的 private
虚拟对象可以保证没有其他人锁定该对象。
如果您锁定数据,而同一数据对外部可见,您就失去了这种保证。例如:
public class MyObject
{
public void SharedMethod()
{
lock (this)
{
// Do stuff
}
}
}
class Program
{
static void Main(string[] args)
{
MyObject o = new MyObject();
lock (o)
{
new Thread(() =>
{
// Gets blocked 2s because of external lock
o.SharedMethod();
}).Start();
Thread.Sleep(2000);
}
}
}
关于c# - 为什么要对单独的对象执行锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873201/