2010-01-01 7 views
10

나는 C++ 03 표준으로, 기능 범위 내 정적 초기화가 스레드 안전이 보장되지 않는 것을 알고있다 최종적으로 표준 스레드 지원을 제공하는 표준은 스레드 안전성이 요구되는 함수 범위 정적 초기화입니까?C++ 0X 정적 초기화 및 스레드 안전

+3

오늘은 C++ 1x –

+0

이라고 생각합니다. Bjarne Stoustrup은 x를 16 진수로 생각한다고합니다. 0x –

+0

@ 존 : 그가 생각하거나 좋아할 수있는 것에 관계없이, 저의 이해는 저것입니다 ISO 지침에서는 표준과 같은 문서 버전을 10 진수로 변경해야합니다. –

답변

9

는이 경우 객체가 동적으로 기능을 입력시 초기화되기 때문에 초기화가, 스레드 안전 할 것 같다, 임계 영역에서 실행되도록 보장된다 :

§ 6.7 stmt.decl

4. ..such 객체가 선언을 처음 통과 할 때 객체가 초기화됩니다 ... 객체가 초기화되는 동안 컨트롤이 동시에 선언에 진입하면 동시 실행은 초기화가 완료 될 때까지 대기합니다 ...

main()에서 반환 한 후 정적 객체의 소멸자가 정적 로컬이 이미 파괴 된 후 함수를 호출하면 동작이 정의되지 않을 수 있으므로 잠재적 인 가장자리 케이스가 있습니다. 그러나, 그것은 피하기 쉽습니다.

+3

유명한 마지막 단어는 "피할 수 있어야합니다". 일반적인 경우에는 피하는 것이 대단히 어렵습니다. –

+0

@deft_code : +1, 최근에 물었다. – peterchen