2012-12-07 2 views
1

fopen/fwrite 및 멀티 스레딩?fopen/fwrite 및 멀티 스레딩?

일부 멀티 스레딩 프로그램은 동일한 파일을 열고 각 스레드는 파일에 대한 파일 포인터를 만듭니다.

다른 프로그램에서 생성 된 다른 스레드가 파일의 내용을 읽는 동안 임의의 시간에 파일을 업데이트하는 paricular 프로그램에서 만든 스레드가 하나 있습니다.

글타래 쓰레드가 파일의 내용을 변경하고 다른 쓰레드가 내용을 읽으려고하면 경주/데이터 불일치 문제가 발생합니다.

여기서 문제는 파일을 업데이트하는 스레드가 파일 내용을 읽는 스레드를 만드는 프로그램과 다른 exe 프로그램으로 컴파일해야하므로 프로그램 내 수준의 스레드 제어가 불가능해진다는 점입니다.

내 솔루션은 하드 디스크에 아주 작은 "플래그"파일을 생성되는 파일의 세 상태를 나타냅니다

파일의 내용을 업데이트 1) 쓰기 - 스레드;

2) 읽기 스레드가 파일의 내용을 읽는 중입니다.

3) 1) 또는 2);

필요할 때마다이 플래그 파일을 사용하여 스레드를 차단합니다.

이 문제에 대한 좀 더 컴팩트하고/깔끔한 해결책이 있습니까?

+0

제안하는 것은 세마포어이며 훌륭한 해결책입니다 :-) 파일을 잠 그거나 파일의 첫 번째 바이트로 세마포어를 넣을 수 있습니다 ... 어느 쪽이든 그것은 멀티 스레딩에 관한 것이 아닙니다. –

+0

파일 잠금이 있습니다. 그리고 당신이 제시 한 주요 동시성 문제는 스레드가 아닌 프로세스 사이입니다. 어떤 운영 체제에 있습니까? – UmNyobe

+0

당신은 파일 잠금에 대해 더 설명 할 수 있습니까? 어떻게 사용하는지, 감사합니다. – 60080

답변

0

모든 프로세스에서 알고있는 프로세스 전역 "이름 지정된"세마포를 사용하는 것이 더 쉬울 수도 있습니다. 게다가 파일 열기 및 파일 내용을 스핀 루핑하는 대신 스레드/프로세스 차단 세마포어 메커니즘을 사용할 수 있습니다 ...