C++多线程笔记(持续更新)
引入头文件thread
#include<thread>
写一个测试函数
void func1() {
cout << "my thread1, thread id is "
<< this_thread::get_id()<<endl;//获取子线程1的id
}
在主函数内定义一个线程,调用func1
int main(){
thread myThead1(func1);//调用函数
myThead1.join();//阻塞主线程(子线程运行完,才运行主线程)。
cout << "This is main thread, thread id is "
<< this_thread::get_id()<< endl;
}
运行结果如下:
如果使用detach()函数,则不阻塞主线程,可能会出现下面的结果
这是由于cout不是线程安全的。
joinable()用于返回是否可以join()或者detach();
int main(){
thread myThead1(func1);//调用函数
myThead1.detach();
if (myThead1.joinable() == true) {
cout << true << endl;
}
else {
cout << false << endl;
}
return 0;
}
输出结果如下
这是由于线程已经join()或者detach()过了,所以不能再join()或者detach()