본문 바로가기
programing/C++

쓰레드 사용시에...

by RedWiz 2017. 3. 7.

1.

두 쓰레드가 같은 공간을 접근할 때 경쟁 조건이 생기는데


그래서 보통은 동기화를 사용함


그 중 유저모드 동기화가 빠르다고 해서 주로 사용하긴 했는데


atomic으로 사용해보니 신세계다.


대충 2배 정도 빠른 듯하다.


while() 문을 이용하므로 계속 cpu를 점유 하던지 sleep()을 넣어야 한다.


2.

두 쓰레드가 매니저(패턴)에 접근시에


이미 만들어져 있으면 큰 문제가 없지만


만들어져 있지 않은 상태로 접근하게 되면


경쟁 조건이 발생하게 되고


나도 모르는 사이에 싱글턴 객체가 두 개가 만들어짐


그래서 종료하다 보면 나도 모르는 메모리 릭이 생긴다.


=> 동기화, 미리 instance만들기, 더블락 (null 체크 -> 동기화 -> null 체크)


3.

static 변수는 함부로 함수로 사용하면 안된다.

싱글톤도 마찬가지


4.

템플릿 함수의 경우....

같은 타입의 경우 static 변수는 race condition이 될 수 있음


다른 타입의 경우 다른 함수 취급이므로 독립적인 static 변수를 사용하게 됨 -> 경쟁 조건이 안됨


5.

https://jacking75.github.io/cpp_singleton_cpp03_cpp11/

http://blog.naver.com/PostView.nhn?blogId=milennium9&logNo=20187440665


c++11에서 스코프 내 정적 변수는 thread safe 하다고 하니 편한 방법으로 싱글톤을 짤 수 있겠다


'programing > C++' 카테고리의 다른 글

문자열 주의점  (0) 2017.03.24
비동기 입출력  (0) 2017.03.10
APC(Asynchronous Procedure Call)  (0) 2017.02.23
VLD(Visual Leak Detector) 사용법  (0) 2017.02.22
포인터  (0) 2017.02.17