我有一个阻塞队列的部分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
),还是直接引用私有成员变量flushed
就足够了,如图所示下面,只使用一个锁吗?
public bool EndOfData
{
get { lock (_locker) { return flushed && (queue.Count == 0); } }
}
答案 0 :(得分:2)
我不认为它有所作为,我个人会使用嵌套版本。
我认为如果使用它Flushed
,实际属性发生了任何变化,你确定
一切都很好。
但我真的相信这是一个偏好电话。