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 !)

Есть ли способ удалить файл блокировки в какой-то момент без введения этого условия гонки?

Ответы на вопрос(3)

Ваш ответ на вопрос