je code partiel C# pour une file d'attente de blocage qui se présente comme suit:Comment verrouiller en toute sécurité cette propriété?
private bool flushed;
private object _locker = new object();
public bool Flushed
{
get { lock (_locker) { return flushed; } }
set
{
lock (_locker)
{
flushed = value;
Monitor.Pulse(queue);
}
}
}
Le procédé Monitor.Pulse
a une contrepartie dans le procédé Monitor.Wait
Dequeue()
de la file d'attente de blocage.
Je souhaite ajouter une méthode qui signale la fin des données, qui vérifie la condition Flush
. Il ressemblera à quelque chose comme ceci:
public bool EndOfData
{
get { lock (_locker) { return Flushed && (queue.Count == 0); } }
}
Voici ma question. Devrais-je appeler la propriété Flushed
comme indiqué dans le code ci-dessus (en prenant un lock
imbriqué), ou suffit-il de faire référence à la variable membre privé flushed
directement, comme indiqué ci-dessous, en utilisant un seul verrou?
public bool EndOfData
{
get { lock (_locker) { return flushed && (queue.Count == 0); } }
}
ne devrait pas faire de différence. –
@Mitch: Donc la seule raison d'utiliser 'Flush' serait d'isoler mon code des changements logiques potentiels de la propriété' Flush' elle-même? –
Robert: Oui ........ –