C# 如何安全锁定此属性?
我为阻塞队列编写了部分C#代码,如下所示:C# 如何安全锁定此属性?,c#,multithreading,locking,nested,C#,Multithreading,Locking,Nested,我为阻塞队列编写了部分C#代码,如下所示: private bool flushed; private object _locker = new object(); public bool Flushed { get { lock (_locker) { return flushed; } } set { lock (_locker) { flushed = value; Monitor.P
private bool flushed;
private object _locker = new object();
public bool Flushed
{
get { lock (_locker) { return flushed; } }
set
{
lock (_locker)
{
flushed = value;
Monitor.Pulse(queue);
}
}
}
public bool EndOfData
{
get { lock (_locker) { return Flushed && (queue.Count == 0); } }
}
Monitor.Pulse
方法在阻塞队列的Dequeue()
方法中有一个对应的Monitor.Wait
我想添加一个方法,该方法发出数据结束信号,检查Flush
条件。它看起来像这样:
private bool flushed;
private object _locker = new object();
public bool Flushed
{
get { lock (_locker) { return flushed; } }
set
{
lock (_locker)
{
flushed = value;
Monitor.Pulse(queue);
}
}
}
public bool EndOfData
{
get { lock (_locker) { return Flushed && (queue.Count == 0); } }
}
这是我的问题。我应该调用上面代码中所示的Flushed
属性(使用嵌套的锁
),还是只使用单个锁直接引用私有成员变量Flushed
我不认为这有什么区别,我个人会使用嵌套版本。 我认为,如果使用它时实际属性发生任何变化,
刷新
,您可以确保
一切都很好
但是我真的相信这是一个偏好调用。不应该有任何区别。@Mitch:所以使用
Flush
的唯一原因是将我的代码与Flush
属性本身的潜在逻辑更改隔离开来?