C++ 多线程分批执行

profile12345 2018-07-16 04:36:03
现在有个需求是这样的,要启动几十个线程,但是要分批执行,就是每次启动5个线程,

然后剩余的线程等待这5个线程执行完了再启动;

比如现在启动5个线程,我在程序中等待5个线程结束了,再启动5个线程,然后又等待这5个线程结束,然后再启动5个线程,直到所有的线程执行完毕。

这个怎么在代码中实现?
...全文
873 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
profile12345 2018-08-14
  • 打赏
  • 举报
回复
哥已经实现了,谢谢各路大侠!~
CyberLogix 2018-08-10
  • 打赏
  • 举报
回复
使用线程池比较好,Boost库里面有
jiqiang01234 2018-08-09
  • 打赏
  • 举报
回复
用windows的信号量CreateSemaphore()和等待函数WaitForSingleObject()可以实现。不过最方便的还是java的CountDownLatch,可以参考一下
赵4老师 2018-08-07
  • 打赏
  • 举报
回复
《Windows核心编程》
yshuise 2018-08-04
  • 打赏
  • 举报
回复
你这种用法是错误的!应该用packaged_task
  • 打赏
  • 举报
回复
这是线程池?
或者叫线程池队列乎?
functional助力C++11实现高度可重用接口-线程池例子
C++与OMP配合的最简线程池
专栏里有一些教学用的小文章
现代C/C++工具链
Mr。Lili 2018-07-27
  • 打赏
  • 举报
回复
你是要同时启动几十个线程,还是就启动5个。 你可以考虑用定时器 实时检查线程的状态。
EL-PAAS微服务 2018-07-26
  • 打赏
  • 举报
回复
你为啥一定要这样去启动线程呢,需求不可能会去指定的线程的启动方式。 好的设计,线程和业务代码是相互独立解耦的。 你这里的需求完全可以使用一个线程来完成,除非你的计算量非常大,即使这样最多启动五个线程就可以了。
profile12345 2018-07-17
  • 打赏
  • 举报
回复
贴个代码看看,大神!
引用 3 楼 sghcpt 的回复:
[quote=引用 2 楼 shkliu163 的回复:] 我去,我的是Windows平台的,
楼主,如果是调用CreateThread来创建线程的或者C/C++运行库函数的创建线程函数(_beginthread或者_beginthreadex),那么创建线程后会返回一个线程句柄,可以保存下来之前创建的5个线程的句柄,然后定时的监测线程的状态,应该调用WaitForSingleObject或者WaitForMultipleObjects函数来监测线程是否结束的状态。监测到5个线程都结束了,就可以启动另外的5个线程继续工作了。也可以创建事件,把事件变量通过参数传给线程,当线程处理完了,就设置事件为受信状态,当然了线程外面也需要定时监测事件变量的状态,如果监测到5事件变量受信状态,则表明线程已经处理完了,可以启动另外的5个线程了。MFC相关的创建线程接口应该也差不多这样处理的。。。[/quote]
sghcpt 2018-07-16
  • 打赏
  • 举报
回复
引用 2 楼 shkliu163 的回复:
我去,我的是Windows平台的,


楼主,如果是调用CreateThread来创建线程的或者C/C++运行库函数的创建线程函数(_beginthread或者_beginthreadex),那么创建线程后会返回一个线程句柄,可以保存下来之前创建的5个线程的句柄,然后定时的监测线程的状态,应该调用WaitForSingleObject或者WaitForMultipleObjects函数来监测线程是否结束的状态。监测到5个线程都结束了,就可以启动另外的5个线程继续工作了。也可以创建事件,把事件变量通过参数传给线程,当线程处理完了,就设置事件为受信状态,当然了线程外面也需要定时监测事件变量的状态,如果监测到5事件变量受信状态,则表明线程已经处理完了,可以启动另外的5个线程了。MFC相关的创建线程接口应该也差不多这样处理的。。。
profile12345 2018-07-16
  • 打赏
  • 举报
回复
我去,我的是Windows平台的,
A-De 2018-07-16
  • 打赏
  • 举报
回复
thread::join

64,637

社区成员

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

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