我有一部分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.Wait
方法在阻塞队列的Dequeue()
方法中有对应的Monitor.Pulse
方法。我想要添加一个检查
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); } }
}
Flush
的唯一原因就是为了使我的代码与Flush
属性本身的潜在逻辑更改隔离开来? - Robert Harvey