涉及线程和并行编程
我在线程上看到了一个被某人回答的问题。我尝试了他回答的代码并写下了。 我试过了
#include <iostream>
#include <thread>
using namespace std;
void printx()
{
cout << "Hello world!!!!"<< endl;
cout << "Hello world!!!!"<< endl;
cout << "Hello world!!!!"<< endl;
cout << "Hello world!!!!"<< endl;
}
int main(){
cout << "Hello world!!!!"<< endl;
thread t1(printx);
//t1.join();
t1.detach();
cout << "Hello world!!!!"<< endl;
t1.join();
return 0;
}
我收到的输出为
Hello world !!!!
只打印过一次 我不明白 不应该是更多的次数
答案 0 :(得分:2)
您需要了解线程的一些基本概念:
thread.detach()
将执行线程与线程对象分开,允许执行独立继续。一旦线程退出,任何已分配的资源都将被释放。
如果两个线程都具有相同的thread id
,则它们是“可加入的”。一旦您调用join
方法或detach
方法,它就变为“不可加入”。
您首先调用了thread.detach()
,这将线程与主线程分开。然后你再次尝试join
它将给出错误,因为两个线程无法连接,因为它们是分开的并且具有不同的thread id
。
使用join
或使用detach
。不要同时使用它们。
加入
当线程执行完成时,函数返回。
void printx()
{
cout << "In thread"<< endl;
}
int main()
{
cout << "Before thread"<< endl;
thread t1(printx);
t1.join();
cout << "After Thread"<< endl;
return 0;
}
分离
分离出两个线程的执行。
void printx()
{
cout << "In thread"<< endl;
}
int main()
{
cout << "Before thread"<< endl;
thread t1(printx);
t1.detach();
cout << "After Thread"<< endl;
return 0;
}
参考文献: