【发布时间】:2010-12-25 16:33:09
【问题描述】:
是否有一种通用的方法可以在对同一组数据进行操作的不同对象之间“共享”锁?
我知道通常不建议使用公共对象进行锁定。
例如,队列可以实现为线程安全的,但其他一些类可能需要特定的锁才能锁定多个队列操作。如果我有第三个类,它也需要对同一个 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);
}
}
}
}
如果其他线程上的某个其他类在 if 条件之后删除了 old 元素,则列表将不再包含该元素,因为 _lock 是一个私有对象。
我应该锁定实际的列表实例吗?
【问题讨论】:
标签: c# multithreading synchronization locking