1.
fwrite의 기능은 thread에 safety하지 못한가?
구글링을 해보니깐 thread-safe와 atomic이란 두개의 개념이 존재했다. 이것 먼저 집고 가자.
2.
thread-safe란
멀티 thread에 의한 동시에 작업되는 공간에서 보장된 신뢰도 있는 작업을 할 수 있는 데이터 구조에 대한 것을 의미한다.
(http://en.wikipedia.org/wiki/Thread_safety)
3.
atomic이란
대략 자원경쟁을 막는 하나의 데이터를 보호하는 것같은데.. 찾기가 어렵네;
(http://2cpu.co.kr/bbs/board.php?bo_table=QnA&wr_id=286485)
정리 : atomic이란 원자와 같은 성질을 같은 구조로 thread safety도 만족하면서 예상되는 결과도 보장해준다. 하지만 thread safety는 안정성은 보장해주지만 결과는 보장하지 않는 구조로 다이어그램으로 볼때 thread safety 안에 atomic이 들어 있는 구조가 된다.
4.
CRT함수가 위험하단 포스트를 찾았다. create thread를 한다음에 CRT함수를 사용하면 memory leak이 생긴다고 한다.
(http://process3.blog.me/20093839045)
하지만 CRT함수는 윈도우에서의 함수이기 때문에 리눅스 사용중인 본인은 해당하지 않는다.
5.
결론.
fwrite, fread는 c언어의 함수로 내부에 자신의 메모리를 갖고 있어서 멀티 스레드 환경에서 thread safety하지 않다.
반면 write, read는 시스템 함수이기 때문에 thread safety를 갖고 있어서, multi thread환경에서는 write, read를 사용해야 한다.
'소프트웨어' 카테고리의 다른 글
[c++] pthread의 detach란... (0) | 2014.02.04 |
---|---|
[펌] pthread 자원 해제에 대한 이야기(pthread_detach, pthread_attr_setdetachstate) (0) | 2014.02.04 |
[c++] 변수 선언에 대해서 (0) | 2014.01.29 |
[c++] const char vs char 비교 실험 (0) | 2014.01.28 |
[c++] thread 기본 구조, 모양 (0) | 2014.01.28 |