저는 많은 프로세스와 해당 프로세스 내에 많은 스레드가 있는 애플리케이션에 대해 상태를 지속적으로 저장하려는 상황을 다루고 있습니다. 일반적으로 충돌이 없는지 확인하려면 잠금을 많이 사용해야 합니다.
O_APPEND 모드를 사용하여 데이터를 파일에 저장하여 이를 방지하고 싶습니다. 이렇게 하면 데이터가 <4KiB인지 확인하는 한 파일 쓰기는 원자적으로 이루어집니다. 추가 전용 데이터 구조를 사용한다면 잠금이 없는 솔루션을 갖게 됩니다.
그러나 이것이 작동하려면 해당 파일에 쓴 후 파일 내의 데이터 위치를 알아야 합니다. 제가 겪고 있는 문제는 파일에 쓴 다음 기록된 해당 파일 내의 오프셋을 알려주는 시스템 호출을 찾을 수 없다는 것입니다.
이 위치를 찾기 위해 쓰기와 탐색을 사용할 수 있습니다. 그러나 다른 스레드가 동일한 파일 설명자를 공유하는 경우 이는 안전하지 않으므로 잠금을 방지하려는 노력에 어긋나는 뮤텍스로 쓰기를 보호해야 합니다.
write, writev, pwrite 및 prwritev에 대한 매뉴얼 페이지를 조사한 결과 쓰기를 수행한 다음 단일 시스템 호출로 쓰기 후 오프셋을 알려주는 항목이 표시되지 않았으며 그렇지 않을 수도 있다는 것을 완전히 알고 있습니다. 내가 뭔가를 살펴 봤나요?