경우에 따라 코더는 원자 호출로 시스템 호출을 신뢰할 수 없습니다. 파일이 NFS 파일 시스템에있는 경우. (c.f. NFS Overview, FAQ and HOWTO Documents). 그러나 대부분의 데이터베이스 작업에는 원자 시스템 호출이 궁극적으로 필요합니다. (c.f. Atomicity of database systems)."쓰기"시스템 호출이 특정 파일에 대해 원자 적 (atomic)인지 프로그래밍 방식으로 결정하는 방법은 무엇입니까?
쓰기 (및 다른 syscalls)가 C (또는 파이썬)의 특정 FILE에 원자적임을 확인하는 표준 (및 OS 독립적 인) 방법이 있습니까?
제안 사항?
후속 노트 : 파이프에 자성은 다음에 설명되어 있습니다 :
- unix pipe multiple writers
- What happens if a write system call is called on same file by 2 different processes simultaneously
주에서 - 특히 O_APPEND 구체적으로 다루는 "사람"페이지 추출물 :
파일 상태 플래그의 O_APPEND 플래그가 설정된 경우, 파일 오프셋은 각 쓰기에 앞서 파일의 끝으로 설정되어야하며 파일 오프셋과 쓰기 작업을 변경하는 사이에 파일 수정 작업을 수행하지 않아야합니다 (예 : ).
데이터베이스가 원자 시스템 호출을 필요로하지 않는다는 것을 알게 될 것입니다 : 데이터베이스에 대한 원자 적 업데이트의 * 모양 *이 필요하지만 트랜잭션 로그를 사용하여 수행됩니다. 실제 데이터베이스 파일은 언제나 일관성이 없지만 트랜잭션 로그에는 일관성을 유지하는 데 필요한 정보가 들어 있습니다. – Duncan
NFS는 단순히 깨지거나 부적합한 동작으로 가득차 있기 때문에 대부분의 경우 적합하지 않습니다. 심각한 네트워크 파일 시스템 사용에는 smb/cifs/9p/anything-but-nfs를 사용하십시오. –
대부분의 데이터베이스가 취한 접근법은 * "NFS에서 실행하지 마십시오."*라는 줄에 따라 문서에 눈에 띄는 메모를 넣는 것 같습니다. *. – caf