C++11多线程编程(2)
目录
- 多线程创建和参数传递
- 多线程条件竞争及其解决方法
- 多线程事件处理、条件变量
- 多线程返回值
- 线程池
3.1 多线程事件处理
在第1部分中对多线程的创建、参数传递的使用作了说明,另外对线程间数据共享导致竞争条件异常进行了分析,并给出互斥锁的解决方式。我继续参考thisPointer的教程,深入多线程的事件处理。
什么是多线程的事件处理?有时候,线程往往需要等待类似于条件为真或另一个线程任务完成的事件,这就是多线程的事件处理。先来看一个程序需求。
3.1.1 功能分析
现在我们需要实现一个网络编程的客户端程序,这个程序的任务如下:
- 连接服务器
- 从XML文件加载数据
- 发送加载的数据
分析易知任务1与其他两个任务是独立的,但任务3依赖于任务2。任务1和任务2可以设计在两个平行执行的线程上实现,从而提升程序的性能。
下面我们将使用多线程的方式设计客户端程序。这个程序包含两个线程,线程1需要完成的任务是:
- 连接服务器
- 等待线程2加载XML文件的数据
- 发送加载的数据
线程2需要完成的任务是:
- 从XML文件中加载数据
- 通知其他等待该数据的线程