Je souhaite avoir des variables de condition de style POSIX sous Win32. J'ai un code qui doit fonctionner sous XP, donc je ne peux pas utiliser Vista/Server 2008 CONDITION_VARIABLE
.Implémentation de variables de condition pour CRITICAL_SECTIONs pour Winthreads pour XP
Il utilise actuellement une classe de variables de pseudo-condition, basée sur le fait de quitter la section critique et de signaler un événement de réinitialisation automatique pour la signalisation/le réveil. Pour attendre sur la variable de condition, il quitte la section critique, WaitForSingleObject
s sur l'événement, puis rentre dans la section critique. C'est plutôt bien, mais cela ne supporte pas la diffusion, et peut avoir d'autres problèmes d'équité, dont je ne me soucie pas trop. Nous utilisons boost, donc je sais que je pourrais utiliser boost threads ou pthreads-win32, qui supportent les variables de condition, mais idéalement je voudrais que l'interface soit telle que je puisse tomber dans l'implémentation de Microsoft quand/si devient possible de l'utiliser directement. J'ai vu Strategies for Implenting POSIX Condition Variables on Win32, mais la meilleure solution (la plus correcte) utilise un Mutex et non un CRITICAL_SECTION
. Il y a un croquis d'une implémentation avec CRITICAL_SECTION
dans le second part, mais il n'est pas complet, et les autres solutions avec CRITICAL_SECTION
me concernent en raison des soucis décrits pour eux dans l'article. En bref, comment implémenter une variable de condition correcte, pas forcément juste (mais qui serait sympa) sur win32 pour les sections critiques, de sorte que je puisse tomber dans l'implémentation de Microsoft quand elle sera disponible pour moi?
Ça a l'air bien! Merci beaucoup. –