c++11 std::thread
c中同样适用的pthread库就不在赘述,只讨论std::thread
C++11中加入的thread,需要编译器支持至少gcc4.7.0以上。编译安装gcc注意参考网上文章。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <unistd.h> #include <iostream> #include <thread> //using namespace std; void thread_func() { std::cout << "this thread = " << std::this_thread::get_id() << std::endl; } int main() { std::thread thread1(thread_func); thread1.join(); return 0; }
1、++ thread.cc -Wall -pthread -std=c++11 -o thread//std::pthread 编译时,还需要加-pthread。。。s
使用std::this_thread::get_id() 获得threadid。http://www.cplusplus.com/reference/thread/this_thread/
2、std::thread的执行体并不要求必须是普通的函数,任何可调用(Callable)的对象都是可以的
使用lambda表达式:std::thread thread1([](int a, int b){std::cout << a << "+" << b << "=" << a + b<< std::endl;}, 1, 2);
3、等待线程结束
线程分为分离或者joinable状态,thread有一个成员函数joinable可以判断是否可以joinable。在被析构时如果joiable == true会导致
terminat()被调用。
默认构造函数对象不代表任何线程,所以joinable是false的;调用过join的是false;调用过detach的;
4、除了std::thread的成员函数外在std::this_thread命名空间中也定义了一系列函数用于管理当前线程。
参考文献:https://blog.poxiao.me/p/multi-threading-in-cpp11-part-1-thread-and-future/