C 11에서 로컬 정적 변수 초기화의 스레드 안전성
질문:
C에서 11, 아래와 같은 지역 정적 변수의 생성자가 한 번만 실행된다는 것이 보장됩니까? 다중 스레드 컨텍스트?
Logger& g_logger() { static Logger lg; return lg; }
답변:
예, LG 생성자는 한 번만 실행되도록 보장됩니다.
C 11 표준(섹션 6.7)에서는 제어가 해당 선언을 처음 통과할 때 지역 정적 변수가 초기화되며 이러한 초기화는 다음과 같이 보장된다고 명시되어 있습니다. 동시 실행이 진행되기 전에 완료됩니다. 또한 초기화 실행 중에 교착 상태가 발생하지 않도록 구현이 필요합니다.
따라서 C 11에서는 스레드로부터 안전한 로컬 정적 변수 초기화가 표준에 의해 시행됩니다.
구현 상태:
인기 컴파일러의 최신 릴리스(gcc 4.7, Visual C 포함) 2011 및 Clang 3.0)은 C 11 표준에 따라 로컬 정적 변수의 스레드로부터 안전한 초기화를 올바르게 구현하는 것으로 확인되었습니다.
위 내용은 C 11의 지역 정적 변수 초기화는 스레드로부터 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!