Две основные проблемы с общими / именованными семафорами POSIX, используемыми в отдельных процессах (не потоках):
Семафоры POSIX не предоставляют механизма для пробуждения процесса ожидания, когда другой процесс умирает, удерживая блокировку семафора. Это отсутствие очистки может привести к появлению семафоров-зомби, которые вызовут любой другой или последующий процесс, который пытается использовать их для взаимоблокировки. Также нет способа POSIX перечислить семафоры в ОС, чтобы попытаться идентифицировать и очистить их. В разделе POSIX на SysV IPC указываются инструменты ipcs и ipcrm для просмотра и управления глобальными ресурсами SysV IPC. Для POSIX IPC такие инструменты или даже механизмы не указаны, хотя в Linux эти ресурсы часто можно найти в / shm. Это означает, что сигнал KILL для неправильного процесса в неправильное время может заблокировать всю систему взаимодействующих процессов до перезагрузки.
Другим недостатком является использование семантики файлов для семафоров POSIX. Подразумевается, что может быть несколько общих семафоров с одинаковыми именами, но в разных состояниях. Например, процесс вызывает sem_open, затем sem_unlink перед sem_close. Этот процесс может по-прежнему использовать семафор, так же как отсоединение открытого файла перед его закрытием. Процесс 2 вызывает sem_open для одного и того же семафора между вызовами sem_unlink и sem_close процесса 1 и (согласно документации) получает новый семафор с тем же именем, но в другом состоянии, чем процесс 1. Два общих семафора с тем же именем независимая работа нарушает цель общих семафоров.
Ограничение, указанное выше, делает общие семафоры POSIX непригодными для использования в реальной системе без гарантии того, что неуловимые сигналы никогда не будут отправлены. Ограничение два может быть смягчено тщательным кодированием, предполагая контроль над всем кодом, который будет использовать данный семафор. Честно говоря, более чем удивительно, что они превратили его в стандарт как есть.