flock (): удаление заблокированного файла без условия гонки?

используя flock () для межпроцессных именованных мьютексов (т. е. некоторые процессы могут решить оставить блокировку включенной)некоторое_имя», который реализуется путем блокировки файла с именем "некоторое_имя» во временном каталоге:

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)

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