У меня есть желание для переменных состояния стиля POSIX на Win32. У меня есть код, который нужно запускать на XP, поэтому я не могу использовать Vista/Server 2008 CONDITION_VARIABLE
.
В настоящее время он использует класс переменных псевдословного условия, который основан на выходе из критического раздела и сигнализирует событие auto reset для сигнализации/пробуждения. Для ожидания переменной условия она оставляет критический раздел, WaitForSingleObject
в событии, а затем возвращается в критический раздел. Это в основном прекрасно, но оно не поддерживает трансляцию, и может иметь другие проблемы в отношении справедливости, о которых я не слишком беспокоюсь.
Мы используем boost, поэтому я знаю, что могу использовать boost-потоки или pthreads-win32, которые поддерживают переменные условий, но в идеале я бы хотел, чтобы интерфейс был таким, что я могу отказаться от реализации Microsoft, когда/можно использовать его напрямую. Я видел Стратегии для внедрения переменных состояния POSIX в Win32, но "лучшее" (самое правильное) решение использует Mutex, а не CRITICAL_SECTION
, Существует эскиз реализации с CRITICAL_SECTION
в второй части, но он не является полным, а другие решения с CRITICAL_SECTION
беспокоят меня из-за проблем, изложенных для них в статье.
Короче говоря, как мне реализовать правильную, не обязательно справедливую (но это было бы хорошо), переменную условия на win32 для критических разделов, чтобы я мог отказаться от реализации Microsoft, когда она станет доступной мне?