프로그램을 짜다 보면 딱 한번만 실행해야 하는 함수들이 있을수 있다.
그런경우 아래와 같이 static bool 변수같은걸 두고 그 값에 따라서 수행하기도 하는데
이 함수가 multi thread 접근을 하는경우 초기화가 다중으로 될 수 있는 위험이 있다.
다행히 boost에서 thread 에 안전한 함수를 제공한다.
- boost::call_once() 는 연결된 함수포인터를보고 단 한번만 수행한다. 두번째로 받는 파라미터는 boost::once_flag 형이다. thread safe 하다.
- boost::once_flag 는 매크로 BOOST_ONCE_INIT 으로 초기화 한다. 초기화 역시 thread safe 하다.
플래그를 전역변수가 아닌 함수 내부 static 변수로 둘경우 아래와 같이 구성할수 있다.
주의해야 할 점은 이 함수들을 클래스의 멤버함수로 구현하는 경우, 초기화의 실제 동작 부분인 initOnlyOnceCore() 는 private 으로 가려져야 이 함수가 직접 호출되는 것을 막을 수 있다.
'Tools for Dev' 카테고리의 다른 글
LaTeX 에서 PNG image 이용시 발생하는 에러 (0) | 2010.05.13 |
---|---|
현재 branch의 Remote 서버 변경하기 (0) | 2010.04.08 |
add가 적용된 파일들에 대한 diff를 보는 방법. (0) | 2010.02.26 |
Syntax highlighter Supported language (0) | 2010.02.01 |
Putty가 멈출 때 (0) | 2010.01.07 |
댓글