主要观点:当在编写代码时遇到可能耗时、阻塞或批量处理的任务(如调整图像大小、调用 API 等),可将其转移到单独线程以避免应用程序停滞,本文介绍用 C++实现异步工作处理的方法,通过classWithWorkerThread
类利用std::thread
、std::mutex
和std::condition_variable
管理异步工作,可自定义并模板化该类以处理更复杂情况,还可使用[concurrentqueue](https://github.com/cameron314/concurrentqueue)
处理更复杂事务。
关键信息:
classWithWorkerThread
类有std::queue
存储工作项,构造函数启动工作线程,析构函数确保线程安全停止。- 工作线程通过
unique_lock
和condition_variable
等待新工作,处理工作项时暂解锁mutex
允许其他线程添加工作。 addSomethingToProcess
方法用于添加工作项到队列并通知工作线程。- 示例
main.ccp
程序使用该类,按ENTER
添加 5 个工作项,输入exit
退出程序。
重要细节:
std::queue
本身非线程安全,类中使用mutex
锁避免竞态条件。- 工作线程在处理完工作项后会再次等待
condition_variable
。 - 示例输出展示了工作项的处理过程和程序的运行状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。