Ich schreibe den Windows-Port für eine Linux-Anwendung und ich versuche, einen geeigneten Ersatz für pthread_cond_wait()
zu finden. Die nächste Alternative scheint SleepConditionVariableCS()
zu sein. Ich bin aber nicht bereit, diese Funktion zu nutzen, weil es CriticalSections verwendet, die im Grunde leichte rekursive Mutexe sind. Ich würde eine nicht rekursive Sperrobjektalternative bevorzugen - gibt es eine?Gibt es eine Version/Äquivalent von SleepConditionVariableCS(), die ein nicht-rekursives Mutex (like) -Objekt verwendet?
P.S. -
- Bei der Anwendung anstelle von pthread mutexes Ich verwende Semaphores mit maximaler Zählung 1.
- Wenn rekursive Mutexe als problematisch sind as stated by David Butenhof dann warum Windows bietet nur rekursive Mutexe (oder Critical) als Option? Ist das ein massiver #Fail von Windows oder ist David Butenhof veraltet/falsch?
Die Concurrency Runtime bietet auch Variablen Zustand, aber Sie werden von denjenigen abweichen, nicht mögen. Rekursive Sperren sind nur ein Merkmal eines Unternehmens mit einer Telefonnummer von 1-800 Support und einem Betriebssystem, das sie * sehr * billig zu erstellen macht. Wenn Sie versuchen, dies zu tun, weil Sie annehmen, dass es billiger ist, dann kümmern Sie sich nicht. Betrachten wir [Erhöhung] (http://www.boost.org/doc/libs/1_58_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref), damit Sie sich besser darüber. –
FWIW, können Sie einfach einen rekursiven Mutex in einen nicht-rekursiven konvertieren. Erhöhen Sie einfach einen Zähler, wenn Sie den Mutex beanspruchen, vergewissern Sie sich, dass er gleich eins ist, und dekrementieren Sie ihn, wenn Sie ihn freigeben. –