Я бы хотел использовать семафоры POSIX для управления атомарным получением и положением из файла, представляющего очередь. Я хочу, чтобы в файловой системе было что-то поименовано, чтобы совершенно не связанные процессы могли совместно использовать очередь. Я думаю, что этот план исключает pthreads. Названные семафоры posix отлично подходят для размещения в файловой системе того, что может увидеть любой процесс, но я не могу найти стандартный примитив CondWait:
... decide we have to wait ....
CondWait(sem, cond);
Когда CondWait вызывается процессом, он атомарно отправляет в sem и ждет на cond. Когда какой-то другой процесс отправляет сообщение в cond, процесс ожидания активируется, только если он может также атомарно уменьшить sem. Альтернатива
... decide we have to wait ....
sem_post(sem);
sem_wait(cond);
sem_wait(sem);
зависит от состояния гонки, при котором некоторые другие сигналы процесса могут находиться перед тем, как этот процесс ожидает его.
Я вряд ли когда-либо занимался параллельным программированием, поэтому я подумал, что могу спросить SO: если я использую стандартный семафор подсчета POSIX для условной переменной, возможно ли, что эта гонка доброкачественная?
На всякий случай, если кому-то нужен более широкий контекст, я создаю операции get и put для атомарной очереди, которую можно вызывать из сценариев оболочки.