我为阻塞队列提供了部分C#代码,如下所示:
private bool flushed;
private object _locker = new object();
public bool Flushed
{
get { lock (_locker) { return flushed; } }
set
{
lock (_locker)
{
flushed = value;
Monitor.Pulse(queue);
}
}
}
Monitor.Pulse
方法在阻塞队列的Monitor.Wait
方法中具有Dequeue()
对应项。我想添加一个信号通知数据结束的方法,该方法检查
Flush
条件。它看起来像这样:public bool EndOfData
{
get { lock (_locker) { return Flushed && (queue.Count == 0); } }
}
这是我的问题。我应该调用上面代码中所示的
Flushed
属性(采用嵌套的lock
),还是仅使用一个锁直接引用私有(private)成员变量flushed
,如下所示,是否足够?public bool EndOfData
{
get { lock (_locker) { return flushed && (queue.Count == 0); } }
}
最佳答案
我认为这没有什么不同,就我个人而言,我将使用嵌套版本。
我认为,如果通过使用Flushed
更改了实际属性,则可以确保
一切都很好。
但是我真的相信这是一个优先选择。
关于c# - 如何安全锁定此属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6964556/