2011-10-07 2 views
5

나는 공유 모드와 배타 잠금 모드를 모두 사용하여 homespun 데이터베이스의 리소스에 대한 액세스를 제어하기 위해 linux에서 flock (2)을 사용하고 있습니다. 공유 잠금이 부여 된 경우 배타적 잠금을 기다리는 차단 된 프로세스가 있는지 여부에 관계없이 다른 프로세스도 공유 잠금을 얻을 수 있습니다. 즉, 중복되는 독자가 많은 인기있는 리소스의 경우 독점적 인 잠금 요청이 오랫동안, 아마도 영원히 굶어 죽을 수 있습니다.linux flock (2)을 배타적 인 배타적 잠금 요청으로부터 보호하려면 어떻게해야합니까?

이 동작은 flock (2) 매뉴얼 페이지와 모순되지 않지만,이 코드는 FreeBSD와 OS-X에서 수년 동안 아무런 문제없이 작동했기 때문에 저를 놀라게합니다. 내 생각에 BSD 시스템은 exclusive lock이 영원히 굶주 리지 않도록 어떤 종류의 큐를 구현해야한다.

내 기본 질문은 배타적 잠금을 굶주 리지 않게하는 간단한 트릭이나 프로그래밍 패턴이 있습니까?

내 호기심을 만족시키기 위해 부차적 인 질문인데, 의심스러운 BSD 시스템에서 이것이 정말로 다른 경우 누구에게 알 수 있습니까?

+0

'flock'은 캐러밴을 연상케합니다. –

답변

0

나는 FreeBSD 7.2에서 똑같은 문제점을 가지고 있었고 flock()에서 작가 기아를 막을 수있는 방법이 없었습니다. SysV IPC 또는 간단한 정지 플래그 파일과 같은 다른 잠금 방법을 선택해야합니다.

관련 문제