一 通过移动构造函数来启动线程
1 代码
#include <iostream>
#include <thread>
using namespace std;
void fun(int & n) //线程函数
{
cout << "fun: " << n << "\n";
n += 20;
this_thread::sleep_for(chrono::milliseconds(10)); //等待10毫秒
}
int main()
{
int n = 0;
cout << "n=" << n << '\n';
n = 10;
thread t1(fun, ref(n)); //ref(n)是取n的引用
thread t2(move(t1)); //t2执行fun,t1不是thread对象
t2.join(); //等待t2执行完毕
cout << "n=" << n << '\n';
return 0;
}
2 结果
[root@localhost test]# g++ -o test test.cpp -lpthread -std=c++11
[root@localhost test]# ./test
n=0
fun: 10
n=30
3 说明
t11并不会执行,执行的是t2,因为t1的线程函数移动给t2了。
二 线程的比较
1 代码
#inc