用于在单独线程上进行异步工作处理的我的常用 C++ 代码

主要观点:当在编写代码时遇到可能耗时、阻塞或批量处理的任务(如调整图像大小、调用 API 等),可将其转移到单独线程以避免应用程序停滞,本文介绍用 C++实现异步工作处理的方法,通过classWithWorkerThread类利用std::threadstd::mutexstd::condition_variable管理异步工作,可自定义并模板化该类以处理更复杂情况,还可使用[concurrentqueue](https://github.com/cameron314/concurrentqueue)处理更复杂事务。

关键信息:

  • classWithWorkerThread类有std::queue存储工作项,构造函数启动工作线程,析构函数确保线程安全停止。
  • 工作线程通过unique_lockcondition_variable等待新工作,处理工作项时暂解锁mutex允许其他线程添加工作。
  • addSomethingToProcess方法用于添加工作项到队列并通知工作线程。
  • 示例main.ccp程序使用该类,按ENTER添加 5 个工作项,输入exit退出程序。

重要细节:

  • std::queue本身非线程安全,类中使用mutex锁避免竞态条件。
  • 工作线程在处理完工作项后会再次等待condition_variable
  • 示例输出展示了工作项的处理过程和程序的运行状态。
阅读 7
0 条评论