1 join方法
代码示例:
#include <iostream>
#include <thread>
void HelloWorld()
{
std::cout << "hello world" << std::endl;
}
int main()
{
std::thread helloWorldThread(HelloWorld);
helloWorldThread.join();
getchar();
return 0;
}
在上述代码中,线程函数HelloWorld将会被子线程helloWorldThread启动,并运行在该线程中,而join函数会阻塞线程,直到线程函数执行完毕,如果线程函数有返回值,那么返回值将会被忽略。
2 detach方法
如果我们不想线程被阻塞怎么办?使用detach方式,但是风险很高,你可以联想C++的野指针。
在下列代码中,线程函数HelloWorld将会被子线程helloWorldThread启动,并运行在该线程中,detach方法会将线程与线程对象分离,让子线程作为后台线程执行,当前的线程也不会被阻塞。但是,线程detach之后无法与当前线程取得任何联系,也就是说detach之后无法使用join等待线程执行完成,因为线程detach之后何时执行完毕取决于其函数体内的运算逻辑。
代码示例:
#include <iostream>
#include <thread>
void HelloWorld()
{
std::cout << "hello world" << std::endl;
}
int main()
{
std::thread helloWorldThread(HelloWorld);
helloWorldThread.detach();
// do other things 马上可以做其他事情,不会被阻塞
getchar();
return 0;
}
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++11/std::thread – 线程管理join/detach
原文链接:https://www.stubbornhuang.com/776/
发布于:2020年04月01日 11:47:27
修改于:2023年06月26日 22:30:09
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52