Ich habe einen Wunsch nach POSIX-Stil-Zustandsvariablen auf Win32. Ich habe etwas Code, der auf XP laufen muss, also kann ich Vista/Server 2008 CONDITION_VARIABLE
nicht verwenden.Implementieren von Bedingungsvariablen für CRITICAL_SECTIONs für WinThreads für XP
Es verwendet derzeit eine Pseudo-Zustandsvariablen-Klasse, die darauf basiert, den kritischen Abschnitt zu verlassen und ein Auto-Reset-Ereignis für Signalisierung/Aufwachen zu signalisieren. Wenn Sie auf die Bedingungsvariable warten, wird der kritische Abschnitt WaitForSingleObject
s des Ereignisses verlassen und der kritische Abschnitt erneut aufgerufen. Das ist meistens in Ordnung, aber es unterstützt keine Übertragung und hat vielleicht andere Probleme in Bezug auf Fairness, die mir nicht so wichtig sind.
Wir verwenden Boost, also weiß ich, dass ich Boost-Threads oder pthreads-win32 verwenden könnte, die Bedingungsvariablen unterstützen, aber idealerweise möchte ich, dass die Schnittstelle so ist, dass ich die Microsoft-Implementierung einfügen kann wird es möglich, es direkt zu verwenden. Ich habe Strategies for Implenting POSIX Condition Variables on Win32 gesehen, aber die "beste" (korrekteste) Lösung verwendet einen Mutex und nicht einen CRITICAL_SECTION
. Es gibt eine Skizze einer Implementierung mit einer CRITICAL_SECTION
in der second part, aber es ist nicht vollständig, und die anderen Lösungen mit CRITICAL_SECTION
s betreffen mich aufgrund der Bedenken, die für sie in dem Artikel beschrieben werden.
Kurz gesagt, wie implementiere ich eine korrekte, nicht unbedingt fair (aber das wäre nett), Bedingung Variable auf Win32 für kritische Abschnitte, so dass ich in Microsofts Implementierung fallen lassen kann, wenn es mir zur Verfügung steht?
Sieht gut aus! Vielen Dank. –