选择正确的对象来锁定线程同步?

时间:2010-12-30 21:56:32

标签: object locking thread-synchronization

通常,代码示例以这种方式使用锁:

static readonly object lockForWorkingWithSharedObject = new object();

lock(lockForWorkingWithSharedObject)
{
   // do something with shared object
}

这样我们在大类中需要很多锁。 将共享对象本身用作同步对象是一种好习惯吗?

// of course here sharedObject is a reference type
lock(sharedObject)
{
   // do something with sharedObject
}

1 个答案:

答案 0 :(得分:1)

在Java和.NET中,让每个对象可锁定的关键正是因为语言设计者认为将对象本身用作锁是有用的。因此也是Java中的synchronized关键字。

如果您需要更精细的锁定粒度,我会假设您最好将对象的状态拆分为多个对象,按语义属于一起的事物进行分组,因此可能还需要同时防止并发访问。