У меня есть частичный код 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
), или достаточно обратиться к закрытой переменной-члену flushed
напрямую, как показано ниже, используя только один блокировка
public bool EndOfData
{
get { lock (_locker) { return flushed && (queue.Count == 0); } }
}