inter-process mutexes에 flock()을 사용하고 있습니다. 즉, 일부 프로세스는 "some_name"이라는 파일을 임시 디렉토리에 잠그면 구현되는 "some_name"에 대한 잠금을 유지할 수 있습니다.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 !)
여기에이 경쟁 조건을 도입하지 않고 어느 시점에서 잠금 파일을 제거하는 방법이 있습니까?
문제는 파일이 리소스를 나타내는 세분화 된 잠금 전략을 구현하려고하지만 공유 된 대용량 리소스 (파일 시스템)에 경합이있는 것입니다. 세분화 된 잠금을 업데이트하기 전에 잠금 파일 디렉토리에 전역 잠금이 필요하거나 잠금 전략을 모두 다시 디자인해야합니다. – jxh
당신은 당신의 필요성을 정교하게 다룰 수 있습니까? 예를 들어, 만약 그들이 모두 동일한 개념적 리소스를 잠그고있는 프로그램은 잘 알려진 파일명을 사용하지 않을까요? –