문제

메모: 파일을 잠그고 잠금 해제하는 방법에 대한 다른 게시물을 읽었습니다. 내가 알지 못하는 특별한 것을 찾지 못했습니다. 그래서 나는 누군가가 몇 가지 제안을 할 수 있도록 내 시나리오를 여기에 넣을 것입니다.

내 경험상, Filechannel.lock은 JVM의 여러 인스턴스의 다른 객체가 파일을 잠그고 업데이트하려고 할 때 파일의 잠금 및 잠금 해제 상황을 보장하지 않습니다.

내 응용 프로그램의 시나리오는 - 파일을 업데이트하는 세 가지 별도의 프로그램이 있습니다. 이러한 프로그램은 다른 JVM 인스턴스에서 실행됩니다. 프로그램이 a, b 및 c라고 가정하고 파일은 F라고 가정합니다. A가 잠금면 파일 f, b 및 c가 다른 프로그램 중 하나가 그것을 유지하기 전에 f가 릴리스 될 때까지 기다려야합니다. 프로그램이 동일한 JVM 인스턴스에서 실행되는 경우 제대로 작동합니다. 불행히도 이것은 여러 JVM 인스턴스에서는 작동하지 않습니다.

F를 업데이트 해야하는지 표시하는 플랫 파일이있는 또 다른 아이디어가있었습니다. 해당 플랫 파일의 내용은 잠금 또는 잠금 해제 될 수 있습니다. 기본/초기 값이 잠금 해제됩니다. 따라서 프로그램 중 하나가 F를 업데이트하려면 플랫 파일에서 플래그를 볼 필요가 있습니다. 플래그가 잠긴 경우 기다려야합니다. 이 접근법에는 문제가 있습니다. 여러 프로그램이 평평한 파일을 동시에 정확하게 열고 "잠금 해제"또는 플랫 파일이 잠금 해제를 읽고 동시에 파일을 참조하기 위해 기다리고있는 두 개의 프로그램을 보는 경우 문제가 있습니다. 잠금 해제 "?

얘들 아?

도움이 되었습니까?

해결책

파일 시스템을 잠금 해야하는 경우 디렉토리를 만들어야합니다. 디렉토리가 존재한다는 것은 "잠금"을 의미하며, 누락 된 디렉토리는 잠금 해제를 의미합니다.

그 이유는 디렉토리를 작성하고 삭제하는 것이 모든 파일 시스템에서 원자 운영이어야하기 때문입니다. 따라서 두 프로세스가 동일한 디렉토리를 만들려고하자마자 그 중 하나는 오류가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top