Java의 메모리 매핑 파일에 읽기/쓰기 액세스 (ONE 읽기 스레드와 ONE 쓰기 스레드)를 구현하려고합니다. 나는 FileChannel이 동시성을 지원하므로 Java에서 메모리 맵핑 된 파일로 유사한 작업을 수행 할 수 있는지 궁금합니다. 나는 결코 같은 시간에 MemoryMappedBuffer의 동일한 영역을 읽고 쓰는 일을 결코하지 않을 것이라고 보장 할 수 있습니다. 즉, 읽기 스레드로 한 영역을 동시에 읽고 쓰레드로 다른 영역에 쓰는 것입니다. 행운?다른 영역에서 동시에 읽고 쓰는 것을 보장 할 수 있다면 메모리 매핑 된 파일을 동시에 읽고 쓸 수 있습니까?
1
A
답변
0
스레드가 다른 메모리 영역에 액세스하는 경우 문제가 발생하지 않습니다. Buffer
의 위치, 한계 및 표시와 관련하여주의해야하며,이 값 은에 동시에 액세스 할 수 없습니다. 인덱스 기반 접근 자 메서드 만 사용하도록 코드를 제한하면 아무런 문제가 없습니다. 또는 duplicate
을 사용하여 독립적 인 스레드 로컬 위치와 한계를 가지기 위해 스레드 당 하나의 버퍼를 만들 수 있습니다.
position
, limit
및 slice
의 조합을 사용하여 원래 버퍼의 다른 영역을 덮도록 적용되는 버퍼를 만들 수도 있습니다. 그들은 또한 독립적 인 위치와 한계를 가질 것이기 때문에, 오버랩되지 않고 각각의 버퍼가 정확히 하나의 쓰레드에만 국한된다면 절대 경쟁 조건을 갖지 않을 것입니다.