Есть идея, почему разработчики POCO решили использовать POSIX API на OSX?
Это кажется довольно произвольным решением со стороны разработчиков POCO: оба семафора на самом деле не соответствуют Windowsименованные семафоры (после чего они, очевидно, созданы).В POSIX нет семафора, который имеет собственное символическое пространство имен, похожее на файловую систему.(Семы SysV имеют пространство имен, состоящее из целочисленных идентификаторов, но без символических имен.)
Если опубликованный код действительно исходит из библиотеки, я могу только посоветовать прекратить полагаться на библиотеку для переносимости.Ну, по крайней мере с семафорами вы, очевидно, уже должны начать свою собственную реализацию.
Edit1 .Проверьте, как семафоры реализованы для Windows.Такие библиотеки часто используют критические разделы Windows.Тогда POSIX sem_t является правильным соответствием.Вам нужен SEM_UNDO, только если к семафору обращаются несколько процессов - он не работает для потоков.Т.е. отмена происходит, когда происходит сбой процесса.Хотя тот факт, что в Linux они используют SysV, вызывает беспокойство.Семафоры SysV являются глобальными и, таким образом, имеют ограничение на количество ОС (которое может быть изменено во время выполнения) по своему количеству - тогда как семафоры sem_t являются локальными для процесса, представляют собой просто структуру в частной памяти и ограничиваются только объемом локальной памятивыделить.
PS Неохотно.Реальная причина может заключаться в том, что основная разработка POCO происходит в Windows (обычно для «переносимых библиотек»; они «переносимы в Windows», так сказать, пытаясь сделать * NIX похожим на Windows).Реализация UNIX очень часто является запоздалой мыслью, реализованной кем-то, кто видел экран терминала с нескольких метров и никогда не читал страницу руководства дальше прототипа функции.Это был мой личный опыт работы с несколькими такими «переносимыми библиотеками» в прошлом.