我想知道为什么c ++ 11需要链接pthread?看起来只需向优化pthread添加一些代码即可。
我想编写一个跨平台的c ++程序,同时需要使用多线程技术。在c ++ 11中,外观看起来像是支持跨平台的,因此我在ubuntu16.04中进行了尝试,但实际上,编译时它仍然需要链接pthread。
#include <thread>
#include <functional>
namespace thread_test{
void test_thread_1(int & i_flag);
void test_thread_2(int & i_flag);
}
int main(int arc, char ** argv){
int i_flag_1 = 0;
int i_flag_2 = 1;
std::thread thread_test_0();
std::thread thread_test_1(thread_test::test_thread_1, std::ref(i_flag_1));
std::thread thread_test_2(thread_test::test_thread_2, std::ref(i_flag_2));
thread_test_1.join();
thread_test_2.join();
return 0;
}
void thread_test::test_thread_1(int & i_flag){
i_flag = i_flag ? 0 : 1;
}
void thread_test::test_thread_2(int & i_flag){
i_flag = i_flag ? 0 : 1;
}
使用“ -std = c ++ 0x -pthread”进行编译是可以的。 但是,如果不添加“ -pthread”,它将编译失败。
答案 0 :(得分:0)
C ++ 11定义了可与多个线程一起使用的标准类,函数,内存模型等。它与特定的编译器将如何提供功能无关。对于Linux,gcc只是决定在后台使用pthread库,这就是为什么我们需要与-pthread
链接。另一个环境或另一个编译器可能不需要这样做。