>백엔드 개발 >C++ >C 11의 지역 정적 변수 초기화는 스레드로부터 안전합니까?

C 11의 지역 정적 변수 초기화는 스레드로부터 안전합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 15:22:41662검색

Is C  11's Local Static Variable Initialization Thread-Safe?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.