C++ 11 关于实现线程池的问题,它没有Suspend,Resume方法

aizquan 2015-08-13 08:03:45
以前在windows平台下用CreateThread来创建一个新的线程,通过对返回的HANDLE调用SuspendThread,ResumeThread来暂停(阻塞)或唤醒线程,Linux下的pthread也有类似的功能。
最近想把自己以前写的线程池改一下,发现C++11中的多线程是通过condition_variable 条件变量的方法wait, notify_one/notify_all来暂停和唤醒线程的。但具体是哪个线程被唤醒了,却是不被知道的。
我觉得这个还是有点坑吧,不知道大家怎么看。
我以前是先从suspend的线程列表中找到一个空闲的线程,给这个线程挂一个task,然后Resume它。现在C++11是得改为把task放到一个taskList里,等某个线程被Resume后,再去取一个task出来处理。以前是不需要taskList的,并且taskList是非线程安全的,我也还需要多加一个锁,问题当然是解决了,但心理感觉不爽。

不知道大家是怎么处理这个的。。。
...全文
164 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiqiang01234 2015-08-13
  • 打赏
  • 举报
回复
std::this_thread::get_id()可获取当前线程id。你那种线程池的做法不是很标准的,应该是所有线程池中的线程均在等待条件变量,如果有需要处理的数据(往往是读取队列中的数据),则条件变量唤醒,某个线程就去执行。这期间无需人为干涉线程的暂停和继续。

64,648

社区成员

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

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