C++에서 local static 변수를 사용할 경우, 멀티스레드 프로그램에서 이른바 race condition이 생길 가능성이 있습니다. 이에 관해 아래 블로그에 자세한 설명이 나와 있습니다.
http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx
위 페이지의 첫번째 예제같이 보통 단순한 전역 bool 값을 사용하는 경우는 쉽게 문제를 알아낼 수 있지만, static object를 함수 안에 사용하는 경우 컴파일러가 내부 최적화하는 과정에서 전역변수 (두번째 예제의 "constructed")를 만들어 내기 때문에, 모르고 지나칠 가능성이 많습니다.
그러니까, 특히 C++를 사용한 멀티스레드 프로그램에서는 local static 변수를 사용을 자제하는 것이 좋겠습니다.
http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx
위 페이지의 첫번째 예제같이 보통 단순한 전역 bool 값을 사용하는 경우는 쉽게 문제를 알아낼 수 있지만, static object를 함수 안에 사용하는 경우 컴파일러가 내부 최적화하는 과정에서 전역변수 (두번째 예제의 "constructed")를 만들어 내기 때문에, 모르고 지나칠 가능성이 많습니다.
그러니까, 특히 C++를 사용한 멀티스레드 프로그램에서는 local static 변수를 사용을 자제하는 것이 좋겠습니다.
Trackback Address :: http://devnote.net/trackback/77