有没有一种常见的方法可以在操作同一组数据的不同对象之间“共享”锁?
我知道通常不建议使用公共对象来进行锁定。
例如,队列可以实现为线程安全的,但是某些其他类可能需要特定的锁来锁定多个队列操作。如果我有第三个类,它还需要对此相同的队列实例执行多个锁定操作会发生什么?
例如: (假设
我知道通常不建议使用公共对象来进行锁定。
例如,队列可以实现为线程安全的,但是某些其他类可能需要特定的锁来锁定多个队列操作。如果我有第三个类,它还需要对此相同的队列实例执行多个锁定操作会发生什么?
例如: (假设
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);
}
}
}
}
如果在不同的线程上,有其他类在if
条件之后删除了old
元素,则由于_lock
是私有对象,列表将不再包含该元素。
我应该锁定实际的列表实例吗?