如何安全地锁定此属性
本文关键字:锁定 属性 安全 何安全 | 更新日期: 2023-09-27 18:04:35
我有一个阻塞队列的部分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
方法在阻塞队列的Dequeue()
方法中有对应的Monitor.Wait
方法。
我想添加一个信号数据结束的方法,该方法检查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); } }
}
我不认为这有什么区别,我个人会使用嵌套版本。我认为,如果使用Flushed
,实际属性发生任何变化,您可以确保一切就绪。
但我真的相信这是一个偏好呼叫。