2013-08-09 2 views
0

하나의 펄 프로세스가 하나의 파일에 쓰고 있고 같은 파일이 자바 스레드에 의해 읽혀지고 있다는 것에 의심의 여지가 있습니다. 만약 그 쓰레드가 perl 프로세스가 쓰고있는 시점에 그 쓰레드가 그 파일을 읽었다면 쓰레드는 대기 상태가되거나 그것을 읽을 수 있다고 가정하자. 대기 상태가되면 다시 실행 상태로 돌아가거나 영원히 대기 상태로 돌아갑니다. 실제로 2 개의 다른 프로세스가 그것을 어떻게 수행 할 것인가.다른 프로세스에 의해 잠긴 파일을 읽는 중

안녕하세요, 실제로 2 프로세스가 있습니다. 하나는 Perl 프로세스이며, 느린 프로세스입니다. 하나의 작업이 완료되어 해당 작업의 상태가 성공 또는 실패로 업데이트 될 때마다 파일을 계속 업데이트합니다. 기타는 태스크 상태가 성공했는지 실패했는지를이 파일에서 계속 읽는 Java 프로세스입니다. 그래서 자바 프로세스가 빠른 프로세스이므로 (어떤 작업도 완료 될 때까지 기다릴 필요가 없음), 이제는 어떤 시나리오가 될 것입니다. 이 java thread는, 파일이 기입 해위한 펄 프로세스에 의해 락되고있을 때, 대기 상태 또는 종료 상태가됩니다. OS는 리눅스입니다.

+1

액세스하려고 시도했을 때 무엇을 발견 했습니까? –

+2

일반적으로 파일 잠금에 익숙합니까? (독점/공유 && 차단/비 차단 잠금 획득?) –

답변

0

파일을 읽을 때 동시에 업데이트하려면 파일을 원자 적으로 (다른 이름으로 새 버전을 작성한 다음 내용을 병합하거나 나중에 이름을 바꾼다)하는 것이 좋습니다.

그러나 특정 시점 (이 경우 펄 스크립트)에서 업데이트하는 프로세스가 하나만 있는지 또는 race condition이 될 수 있는지 확인해야합니다.

일반적으로 unix file-locking을 읽어 볼 수 있습니다.

관련 문제