是否有共同的方式來「共享」在同一組數據上運行的不同對象之間的鎖?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