2013-11-29 4 views
1

나는 다음과 같은 작은 코드로 문제를 감소 : 왜 thread_local의 이러한 사용은 충돌합니까?

struct tls { 
    ~tls() {} 
    void dont_opt_out() {} 
}; 

thread_local tls tls_obj; 

int main(int argc, char **argv) { 
    tls_obj.dont_opt_out(); 
} 

이 프로그램이 충돌을 실행합니다. 왜?

Windows에서 gcc 버전 4.8.2를 사용하고 있습니다. g++ -std=c++11 main.cpp으로 컴파일합니다.

+0

[coliru] (http://coliru.stacked-crooked.com/a/fd105c040c971bd1) 및 [IDEone] (http://ideone.com/GxxmPu)에서 작동 GCC 4.8.1 ... – Potatoswatter

+0

@Potatoswatter coliru is linux - 이것은 Windows에 있습니다. – orlp

+0

데이터 포인트입니다. Windows 런타임 라이브러리가 손상된 것 같습니다. 그건 그렇고, 충돌의 본질은 무엇입니까? – Potatoswatter

답변

1

코드를 멀티 스레드로 컴파일 해보십시오.

Cygwin에서 컴파일러와 링커 모두에 대해 -mthreads 옵션이 있습니다.

+0

MinGW는 무엇입니까? ('-mthreads' 여전히 크래시) – orlp

+0

'-mthreads'는 MinGW 옵션입니다. 'man gcc'를 보라. –