C++ thread构造函数抛出异常_RESOURCE_UNAVAILABLE_TRY_AGAIN

qq_31039711 2020-03-18 04:17:41
在VS2019上运行如下代码,当开启的线程数目超过四个时,thread构造函数就会抛出异常_RESOURCE_UNAVAILABLE_TRY_AGAIN

请问各位大神,这种情况如何解决?

thread* ODAssign = new thread[ODNum];
int num_threads = 0;
for (int i = F_NodeNumber + ODNum; i < F_N; ++i) { //遍历到达小区编号
ODAssign[num_threads] = thread(F_Multi_thread_assign, ref(outF), k, i, num_threads); //多线程并行分配,并输出路径结果
num_threads++;
// if (num_threads >= 4)
// {
// break;
// }
}
for (int i = 0; i < num_threads; ++i)
ODAssign[i].join();
...全文
665 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31039711 2020-04-06
  • 打赏
  • 举报
回复
最后通过将thread改成async解决
qq_31039711 2020-03-21
  • 打赏
  • 举报
回复
将循环改成0-ODNum,ODAssign New完赋NULL后,问题依然存在........
ggglivw 2020-03-20
  • 打赏
  • 举报
回复
你没有完整代码,我只是根据部分代码推测的,毕竟我不知道上面FOR的起始结果到底是多少。
ggglivw 2020-03-20
  • 打赏
  • 举报
回复
其实我更好奇你为啥这样循环for (int i = F_NodeNumber + ODNum; i < F_N; ++i)。 为啥不用0-ODNum, 你这是人为增加难度,如果需要计算某些参数,你临时计算了传递到线程就好。基本上你这个报错99.99%是越界和野指针造成的,ODAssign NEW完也没有全部赋NULL,
ggglivw 2020-03-20
  • 打赏
  • 举报
回复
你想多了,我new 100 thread个都不会有问题。仔细检查代码,+printf调试
qq_31039711 2020-03-20
  • 打赏
  • 举报
回复
具体异常显示如下图
qq_31039711 2020-03-20
  • 打赏
  • 举报
回复
哦哦,F_N的值是等于F_NodeNumber+ODNum*2的,所以是不存在越界的问题的~就是当开启线程数过多时,thread构造函数抛出_RESOURCE_UNAVAILABLE_TRY_AGAIN,把线程数限制在两三个的时候是正常运行的
ggglivw 2020-03-20
  • 打赏
  • 举报
回复
看不到你的完整代码。不过有几个问题,1. 如果第一个for次数太多,会不会越界. 毕竟你的条件不是0- ODNum. 你的代码我不知道for的起始条件. 如果越界了,下面肯定出问题
qq_31039711 2020-03-20
  • 打赏
  • 举报
回复
自顶,求教~

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧