이 블로그 검색

2014년 5월 15일 목요일

g++ std::thread -pthread option?

std::thread 를 이용한 프로그램을 리눅스 환경에서 g++ 을 이용, 컴파일 하는경우 -pthread 옵션이 필요하다. 
다음과 같은 샘플 프로그램이 있다고 해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//std_thread_test.cpp
#include <thread>
#include <iostream>

void thread_func()
{
    std::cout<<"hello, I am a thread!"<<std::endl;
}

int main()
{
    std::thread t(thread_func);
    t.join();
}

컴파일시에 다음처럼 -pthread 옵션을 설정해야한다.

g++ -std=c++11 -pthread -o std_thread_test std_thread_test.cpp

옵션을 주지 않는 경우엔 컴파일은 되지만 실행시 core dump가 발생한다.
사용된 g++의 버전은 g++ 4.8.2 으로 c++11 의 기능을 대부분 지원한다.
그렇다면 의문점이 생긴다. c++11 을 지원한다는 g++에 왜 -pthread 란 옵션이 필요한가?
언어 차원에서 지원된다는데 왜 pthread 라이브러리 이런게 보이는건지..?

좀 생각해보니 spec과 구현의 문제라는걸 알게 되었다.
c++11 의 thread specification 을 g++에서는 기존의 pthread 라이브러리를 사용해서 구현한것일뿐이다.(이건 사기?). 
이건 g++ -v 을 실행해보면 확인할수 있다.


Thread model로 posix 를 사용한다 (좀 허무)