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 |