멀티 쓰레드 환경에서 파일 락(lock)은 일반적으로 어떻게 코드를 짜는 건지 궁금합니다.
글쓴이: vudghkzm / 작성시간: 월, 2007/04/30 - 8:29오후
1개의 파일에 여러개의 쓰레드가 접근해서 메세지를 기록해야 합니다.
유닉스, 리눅스 맨 페이지에 보면 fopen()이 thread safe 하다고 나와 있습니다.
그래서 크게 신경쓰기 않고 코드를 만들면 됩니다.
하지만 MSDN에는 도통 그런말을 찾아볼 수가 없네요.
여러 OS에서 동작가능하게끔 만들고 있기 때문에 윈도우즈 환경에서도 구동될 수 있게 해야 하는데, 난감하네요.
파일별로 뮤텍스를 만들고 관리하는 방법 밖에 없는 건가요?
이런 경우 일반적으로 어떻게 하는지 궁금합니다.
Forums:
필요할 때 마다
필요할 때 마다 fopen(), write, fclose() 하는 방식인가요 ?
그렇지 않다면... 어떤 파일에 대한 FILE * 을 모든 쓰레드가 공유하는 편이 더 좋습니다. 한 쓰레드가 변화시킨 offset 이 다른 쓰레드에도 즉각적으로 반영됩니다. fopen() 이후에 외부에서 파일의 내용이 변경됐을 경우에도 fseek() 가 잘 작동하는 지는 모르겠습니다만, 분명한 것은 seek와 read/write 가 분리되는 경우는 무조건 thread-unsafe 라는 겁니다. 오죽하면 pread(), pwrite() 가 나왔을까요.
FILE * 을 쓰레드가 공유하는 방식이라면 FILE * 과 뮤텍스를 포함하는 자료구조를 설계하고, 구현하시면 쉬울 것 같습니다. OS 별로 찢기에도 편할 것 같고, 언어(컴파일러?)에도 비교적 독립적으로 될 것 같기도 하고.
필요할때 마다 fopen, fwrite, fclose 하는 방식입니다만..
쓰레드 마다 필요할 때 마다 fopen, fwrite, fclose 하는 방식입니다만..
이럴 경우는 어떻게 해야 하나요?
댓글 달기