flock (): удаление заблокированного файла без условия гонки?
Я использую flock () для межпроцессных именованных мьютексов (то есть, какой-то процесс может решить заблокировать «some_name», что реализуется путем блокировки файла с именем «some_name» во временном каталоге:
lockfile = "/tmp/some_name.lock";
fd = open(lockfile, O_CREAT);
flock(fd, LOCK_EX);
do_something();
unlink(lockfile);
flock(fd, LOCK_UN);
Файл блокировки должен быть удален в какой-то момент, чтобы избежать заполнения временного каталога сотнями файлов.
Однако в этом коде есть очевидное условие гонки; Пример с процессами 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 !)
Есть ли способ удалить файл блокировки в какой-то момент без введения этого условия гонки?