4 votes

Comment les variables de condition sont-elles mises en œuvre ?

Cela m'a longtemps déconcerté.

Avec des primitives atomiques de base comme compare & swap, je peux voir comment implémenter un spin lock (à partir duquel je peux construire des mutex).

Cependant, je ne vois pas comment je peux construire des variables de condition à partir de cela. Comment cela se fait-il ?

2voto

Michael Burr Points 181287

Ce n'est pas particulièrement simple. Ce qui suit est un lien vers un article de Douglas Schmidt (qui est aussi en grande partie responsable des bibliothèques ACE) qui détaille plusieurs approches pour implémenter des variables de condition sous Windows en utilisant les primitives de synchronisation disponibles dans Win32 (pré-Vista). Les approches comprennent l'utilisation des primitives de base, généralement disponibles sur n'importe quel système d'exploitation, et discutent des diverses limitations de ces approches :

La ligne de fond (remarques finales) :

Cet article illustre pourquoi le développement de variables de condition sur les plateformes Win32 est délicat et source d'erreurs. Il existe plusieurs forces de conception subtiles qui doivent être prises en compte par les développeurs. En général, les différentes implémentations que nous avons examinées varient en fonction de leur exactitude, efficacité, équité et portabilité. Aucune solution ne fournit toutes ces qualités de manière optimale.

El SignalObjectsAndWait La solution de la section 3.4 est une bonne approche si l'équité est primordiale. Cependant, cette approche n'est pas aussi efficace que les autres solutions, ni aussi portable. Par conséquent, si l'efficacité ou la portabilité sont plus importantes que l'équité, l'approche de la SetEvent L'approche décrite à la section 3.2 pourrait être plus appropriée. Naturellement, la solution la plus simple serait que Microsoft fournisse simplement des variables de condition dans l'API Win32.

Notez qu'à partir de Vista, Windows prend en charge les variables de condition en utilisant des API natives :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X