많은 동시 액세스를 프로세스별로 처리 할 수 있어야하는 응용 프로그램을 작성하고 있습니다. 따라서 뮤텍스 나 락을 적용해서는 안됩니다.크로스 플랫폼 및 교차 프로세스의 원자 적 쓰기가 파일에 기록됩니다.
잠금을 최소화하려면 파일을 "추가 전용"으로 설계하므로 모든 데이터가 먼저 디스크에 추가되고 주소가 정보를 가리키고 있습니다. 업데이트 됨은 새로운 것을 참조하도록 변경됩니다. 그래서 새로운 주소를 참조하도록이 하나의 int를 변경하기 위해서만 작은 잠금 시스템을 구현해야합니다. 가장 좋은 방법은 무엇입니까?
주소 앞에 플래그를 두는 것에 대해 생각했습니다. 설정 될 때까지 독자는 출시 될 때까지 스핀 록을 사용합니다. 하지만 원자력이 전혀 아닌 것 같아? 예 :
- 리더가 플래그를 판독하고, 동시에에
- 해제하고, 작가는 플래그를 기록하고 불일치 값을 읽을 수있다 INT
- 독자의 값을 변경!
나는 잠금 기술을 찾고 있지만 스레드 찾기 기술이나 필드가 아닌 전체 파일을 잠그는 것이 모두 발견됩니다. 이것을 할 수 없습니까? 추가 전용 데이터베이스가 어떻게 이것을 처리합니까?
편집 : 내가 어떻게 append-only db (couchDB)를하는지 보았는데 파일에 대한 쓰기를 직렬화하기 위해 스레드를 사용하는 것 같습니다. 즉, 파일 시스템 잠금으로 전체 파일을 잠그지 않고도 sqlite처럼 임베드 가능하게 만들 수는 없습니까?
감사합니다. Cauê
2 개의 잠금 장치를 작성하고 작성한 것보다 역순으로 읽으면 추악한 해결책을 얻을 수 있습니까? – Waneck