std::threadt1(task); std::thread t2 = t1;//错误: 线程不可以复制 std::thread t3{t1};// 错误: 线程不可以拷贝构造 //一次只有一个线程对象负责一个任务。但是,与线程对象关联的任务是可移动的: std::thread t4 =std::move(t1);//正确: t4现在运行task,t1变成一个空对象 std::thread::swap成员...
1#include <iostream>2#include <thread>3using namespace std;45void t1()//普通的函数,用来执行线程6{7for(int i=0;i<20;++i)8{9cout<<"t1111\n";10}11}12void t2()13{14for(int i=0;i<20;++i)15{16cout<<"t22222\n";17}18}19int main()20{21thread th1(t1);//实例化一个线程对...
AI代码解释 #include<iostream>#include<thread>#include<mutex>std::mutex mtx;// 互斥锁intsharedValue=0;voidincrement(intid){for(inti=0;i<100000;++i){std::lock_guard<std::mutex>lock(mtx);// 自动加锁和解锁++sharedValue;}}intmain(){std::threadt1(increment,1);std::threadt2(increment,2)...
}intmain(){inta =0;std::threadt1(func,a);//函数名和参数,没有参数的函数则只需写函数名func(a); t1.join();//线程必须伴随join或者detach,具体在后文介绍return0; } 运行结果如下: 其中使用usleep是为了给程序添加延时,否则func速度非常快,会使得还没有在主线程执行func,创建的线程t1已经执行完毕。
thread th1(t1); thread th2(t2); th1.join();//等待th1执行完th2.join();//等待th2执行完cout<<"here is main\n\n";return0; } 此时就可以正常地执行子线程了,同时注意最后一个输出,说明了main是等待子线程结束才继续执行的 需要注意的是线程对象执行了join后就不再joinable了,所以只能调用join一次...
std::thread t1(increment, 1); std::thread t2(increment, 2); t1.join(); t2.join(); std::cout << "Final shared value: " << sharedValue << std::endl; // 应该是200000 return 0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. ...
}intmain(){//std::thread t1(myfunc_work);//cout << "main thread ..." << endl;阻塞当前main主线程,待子线程执行完毕后,自己恢复主线程逻辑//t1.join();threadt1(foo);threadt2(bar,10); cout <<"main,foo,bar execute concurrently...\n"; cout ...
{ // 临时对象默认调用移动构造产生临时变量 std::thread t1(doSomething, 23, ThreadData{}); t1.join(); } { ThreadData data; // 命令变量默认通过拷贝构造产生临时变量,可以通过std::move函数改为移动构造 std::thread t(doSomething, 89, std::move(data)); t.join(); printf("pause... data....
}intmain(){intx =10;threadt1(thread_func, ref(x));threadt2(move(t1));// t1 线程失去所有权thread t3; t3 =move(t2);// t2 线程失去所有权// t1.join(); //执行会报错:已放弃 (核心已转储)t3.join(); cout <<"main end: x = "<< x << endl;return0; ...