Я использую flock() для inter-process с именем mutexes (т.е. какой-то процесс может решить заблокировать "some_name", который реализуется путем блокировки файла с именем "some_name" в каталоге temp:
lockfile = "/tmp/some_name.lock";
fd = open(lockfile, O_CREAT);
flock(fd, LOCK_EX);
do_something();
unlink(lockfile);
flock(fd, LOCK_UN);
Файл блокировки должен быть удален в какой-то момент, чтобы избежать заполнения каталога temp сотнями файлов.
Однако в этом коде есть очевидное условие гонки; пример с процессами A, B и C:
A opens file
A locks file
B opens file
A unlinks file
A unlocks file
B locks file (B holds a lock on the deleted file)
C opens file (a new file one is created)
C locks file (two processes hold the same named mutex !)
Есть ли способ удалить файл блокировки в какой-то момент без представления этого состояния гонки?