利用诸如互斥量和信号量的同步原语,我们可以构建出更加实用的多线程工具。
Monitor
在多线程程序中,常常有会一些闭包需要跨线程调用,当这些闭包对同一资源产生竞争时,我们需要对该资源加锁;利用互斥量我们可以构建一个非常有用的小工具——监视器(Monitor)。
1 |
|
简单的使用如下:
1 |
|
Work Queue
在多线程模型中,最常见的便是生产者/消费者模型。
队列可以帮助我们简化多线程程序设计,一个仿照Boost::Asio:: io_service的任务队列推导如下:
1 |
|
这种实现的特点如下:
- 对Stop()的调用会将结束标志加入队列
- 当消费者取出结束标志,它会在退出前再推入一个结束标志到队列
- 多次对Stop()的调用——队列中的多余结束标志,不会有副作用
简单的使用如下:
1 |
|