プロセス間の名前付きミューテックスに 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 !)
この競合状態を導入することなく、ある時点でロック ファイルを削除する方法はありますか?