메서드 내에서 선언 된 정적 변수가 스레드로부터 안전하지 않다는 것을 기억합니다.뮤텍스가없는 스레드 안전 정적 변수?
Dog* MyClass::BadMethod()
{
static Dog dog("Lassie");
return &dog;
}
내 라이브러리가 응용 프로그램의 일부로 컴파일 최종 사용자를위한 C++ 코드를 생성 (Todd Gardner에서 언급 한 바와 같이 What about the Meyer's singleton? 참조). 생성 된 코드는 스레드로부터 안전한 크로스 플랫폼 방식으로 정적 변수를 초기화해야합니다. 변수 초기화를 뮤텍스하기 위해 boost::call_once
을 사용하고 싶지만 최종 사용자는 부스트 의존성에 노출되어 있습니다.
최종 사용자에게 추가 의존성을 강요하지 않으면이 작업을 수행 할 수있는 방법이 있습니까?
부스트 라이브러리를 정적으로 직접 링크 할 수도 있습니다. 그런 다음 사용자가 불편을 겪을 염려없이 부스트 라이브러리를 사용할 수 있습니다. – Ben
[C++ 11에서는 로컬 정적 변수 초기화가 스레드 안전합니까?] (http://stackoverflow.com/questions/8102125/is-local-static-variable-initialization-thread-safe-in-c11) –
@ LucianAdrianGrijincu,이 질문은 C++ 11 이전 (2009 년 게시되었습니다)이므로 귀하의 질문은 엄격한 복제는 아니지만 관련이 있습니다. 링크를 가져 주셔서 감사합니다. – Gili