当前位置: 首页> 健康> 养生 > 平面设计工资怎样_娱乐类网站怎么建设_识图_企业营销策略有哪些

平面设计工资怎样_娱乐类网站怎么建设_识图_企业营销策略有哪些

时间:2025/9/21 23:55:30来源:https://blog.csdn.net/m0_64014551/article/details/145909396 浏览次数:0次
平面设计工资怎样_娱乐类网站怎么建设_识图_企业营销策略有哪些

【c++】【线程池】固定式线程池存在的问题以及解决方式

1 线程池只能处理返回值类型为空 参数类型也为空的任务

因为在设计上 固定式线程池使用了
using Task = std::function<void(void)>; 这个设计

解决方式

可以通过bind 的方式解决
在向线程池添加任务时 通过bind进行添加
mypool.AddTask(bind(func, i))

2 如果停止线程池时 内部调用直接停止函数Stop()

m_queue.Stop() 这个函数将同步队列强制停止
接着将所有的线程终止掉 有的任务并未得到执行

解决方式

  1. 强制停止改为等待停止
  2. 等待停止设计上 新添加一个条件变量 m_waitStop
  3. 先获得锁 当任务队列未空一直等待 这里需要设置一个超时时间( 因为这个条件变量不是生产者或者消费者 无人唤醒 会卡死在这里)
  4. 接着将同步队列是否停止 m_stop置为true
  5. 唤醒生产者和消费者

3 多线程下的竞态访问

当我使用一个二维数组存储数据 部分向里面添加数据 部分对数据进行排序 由于在多线程的环境下可能会造成竞态访问

解决方式

  1. 可以给出两个不同线程池处理
  2. 加锁 但是会导致速度降低 不符合需求

4 并不是线程数越多 执行速度越快

受限于cpu核数和处理机制 以及线程太多等待cpu 切换上下文 反而更消耗时间 导致cpu负载过高

下个文章写线程池的拒绝策略

关键字:平面设计工资怎样_娱乐类网站怎么建设_识图_企业营销策略有哪些

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: