我为阻塞队列提供了部分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),还是仅使用一个锁直接引用私有(private)成员变量flushed,如下所示,是否足够?
public bool EndOfData
{
    get { lock (_locker) { return flushed && (queue.Count == 0); } }
}

最佳答案

我认为这没有什么不同,就我个人而言,我将使用嵌套版本。
我认为,如果通过使用Flushed更改了实际属性,则可以确保
一切都很好。

但是我真的相信这是一个优先选择。

关于c# - 如何安全锁定此属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6964556/

10-11 23:59