Статьи, на которые вы ссылаетесь, были написаны моими коллегами как результат нашей работы над платформой ACE C ++ и ее оболочками ОС. Как упоминалось в моей биографии, «я не делаю Windows», но я все еще активно работаю над ACE, и я просто посмотрел, и оказалось, что реализация условной переменной для Win32 использует CRITICAL_SECTION
(при первоначальной проверке это выглядит как будто он просто использует мьютекс, но если вы копаете глубже, вы обнаружите, что ниже есть слой, в котором мьютекс определен как CRITICAL_SECTION
на платформах Windows).
К вашему сведению, чтобы убедиться, что код не был изменен для использования новых API-интерфейсов Vista, проверенная мной кодовая база на самом деле является веткой от строки 1,5.
Предполагая, что вам просто нужен C API для условных переменных, а не обертки C ++ вокруг него, все это должно содержаться в одном наборе файлов: ace/OS_NS_Thread.{h,inl,cpp}
Лицензия на ACE очень щедрая, а не GPL, так что вы может поднять код оттуда в базу проприетарного кода, не опасаясь «заражения GPL».
Вы можете получить релизы ACE по адресу http://download.dre.vanderbilt.edu/;. Проверенная мною версия является коммерчески поддерживаемой версией, производной от ACE 5.5.2, поддерживаемой OCI и доступной для загрузки по адресу http://www.theaceorb.com/downloads/1.5a/index.html.
В интересах полного раскрытия информации я долгое время был пользователем / участником / сопровождающим в ACE, некоторое время работал в этом исследовательском штате и сейчас являюсь сотрудником OCI. Я не думаю, что это меняет полезность / применимость этого кода для вас, и ни одна из вышеупомянутых организаций не получает доход от того, что вы забираете код из источника.