是否有共同的方式来“共享”在同一组数据上运行的不同对象之间的锁?C#与多线程共享锁
我知道有一个公共对象锁定通常不建议。
例如,队列可以实现为线程安全,但其他一些类可能需要特定的锁才能锁定多个队列操作。如果我有第三个类,那么还需要在这个Queue实例上进行多个锁定操作?
例如: (比方说L<T>
是线程安全的名单,只是为了节省一些打字)
class Worker
{
private readonly L<Something> _list;
public Worker(L<Something> list) { _list = list; }
private readonly object _lock = new object();
public void Replace(Something old, Something new)
{
lock (_lock)
{
if (_list.Contains(old))
{
_list.Remove(old);
_list.Add(new);
}
}
}
}
如果其他类,在不同的线程中,只是在移除old
元素if
条件下,列表将不再包含该元素,因为_lock
是一个私有对象。
我应该锁定实际的列表实例吗?
谢谢,这是我的问题的正确答案:共享锁的常用方法。我意识到这些影响,但只是想看看是否有第三种可能性,我不知道。 – Groo 2009-12-11 15:28:13