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

我为阻塞队列编写了部分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);
        }
    }
}
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
属性本身的潜在逻辑更改隔离开来?