Ваша проблема (с файлами и чередующимися ролями при создании / удалении файлов) кажется кандидатом на использование флага O_EXCL
при открытии / создании файла. Этот флаг заставляет системный вызов open(2)
успешно создать файл только , если файл не существует, поэтому он заставляет файл отображаться как сам семафор. Каждый процесс может освободить блокировку (A или B), но тот, который это делает, просто освобождает блокировку и снова делает доступной роль владельца .
Вы увидите, что оба процесса пытаются использовать одну из ролей, но если они оба попытаются использовать роль владелец , одна из них будет успешной, а другая не удастся.
Просто включите обработчик сигнала SIGINT
на процесс владеющий , чтобы разрешить ему удалить файл в случае получения сигнала, или вы оставите файл, и после этого ни один процесс не сможет принять на себя роль владеющего (при по крайней мере, вам нужно будет удалить его вручную).
Это была первая форма функции блокировки в unix, задолго до того, как появились семафоры, разделяемая память или другие способы блокировки процессов. Он основан на атомарности системных вызовов (вы не можете выполнять два системных вызова в одном файле одновременно)