使用单独的对象进行同步

Che*_*tah 2 c# multithreading synchronization locking

我看到了很多:

object lockObj;
List<string> myStrs;

// ...

lock(lockObj)
{
    myStrs.Add("hello world");
}
Run Code Online (Sandbox Code Playgroud)

为什么要有单独的对象?当然你可以这样做:

List<string> myStrs;

// ...

lock(myStrs)
{
    myStrs.Add("hello world");
}
Run Code Online (Sandbox Code Playgroud)

Rot*_*tem 5

仅在myStrs公共时才直接锁定列表是一个问题,因此也可以被其他调用者锁定,从而导致可能的死锁.

如果它是一个私人成员,那么应该没有问题,但object在任何情况下锁定一个单独的是一个好习惯.

有关更详细的答案,请参阅此类似问题: 为什么锁定(此){...}不好?