잠금이 없을 때
두 writer가 같은 offset에 쓰면 마지막 write가 앞선 변경을 덮거나 레코드 일부만 섞일 수 있습니다.
파일은 여러 프로세스가 동시에 열 수 있습니다. 잠금은 접근 자체보다 수정 구간의 규칙을 정해 데이터가 섞이는 상황을 피하게 합니다.
두 writer가 같은 offset에 쓰면 마지막 write가 앞선 변경을 덮거나 레코드 일부만 섞일 수 있습니다.
협력하는 프로세스끼리 전체 파일을 잠급니다. 규칙을 무시한 프로세스의 read/write는 기술적으로 가능할 수 있습니다.
파일의 특정 byte range만 잠급니다. 데이터베이스처럼 파일 하나에 여러 레코드를 담을 때 병행성을 보존합니다.
OS가 접근을 막는 방식이지만 설정과 이식성 제약이 커서 일반적인 Unix 실무에서는 권고적 잠금이 더 흔합니다.
수정할 파일을 열어 fd를 얻습니다.
전체 파일 또는 레코드 범위를 잠급니다.
검증과 갱신을 같은 보호 구간에서 처리합니다.
공유 파일의 대기 시간을 줄이기 위해 즉시 해제합니다.
fd와 관련 상태를 정리합니다.
POSIX fcntl 잠금과 BSD flock은 서로 독립적으로 동작할 수 있습니다.
NFS에서는 서버, 클라이언트, 잠금 데몬 상태가 모두 영향을 줍니다.
동시 수정 충돌을 줄일 뿐, 잘못 쓴 데이터를 되돌리지는 않습니다.