线程类无法正常工作
thread class doesn't work properly
与线程和并行编程有关
我看到了一个关于线程的问题,该问题是由某人回答的。我尝试了他回答的代码并写了。我尝试了
#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;
}
我收到了输出为
你好世界!!!
仅印刷一次我不明白是否应该更多的次数
您需要了解线程的一些基本概念:
thread.detach()
将执行线程与线程对象分开,从而使执行能够独立继续。线程退出后,任何分配的资源将被释放。
如果两个线程都具有相同的thread id
,则两个线程是"可加入的"。一旦您称为join
方法或detach
方法,它就会变成"不可加工"。!
问题
您首先称为thread.detach()
,将线程与主线程分开。然后,您再次尝试使用join
,这将出现错误,因为两个线程分开并且具有不同的thread id
。
解决方案
使用join
或使用detach
。不要使用两者。
JOIN
函数在执行线程完成后返回。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; }
参考:
- 加入
- 分离
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程