Chen Yuan's Blog
日志 标签 关于

2017年10月7日

C++11多线程编程(2)

目录

  1. 多线程创建和参数传递
  2. 多线程条件竞争及其解决方法
  3. 多线程事件处理、条件变量
  4. 多线程返回值
  5. 线程池

3.1 多线程事件处理

在第1部分中对多线程的创建、参数传递的使用作了说明,另外对线程间数据共享导致竞争条件异常进行了分析,并给出互斥锁的解决方式。我继续参考thisPointer的教程,深入多线程的事件处理。
什么是多线程的事件处理?有时候,线程往往需要等待类似于条件为真或另一个线程任务完成的事件,这就是多线程的事件处理。先来看一个程序需求。

3.1.1 功能分析

现在我们需要实现一个网络编程的客户端程序,这个程序的任务如下:

  1. 连接服务器
  2. 从XML文件加载数据
  3. 发送加载的数据

分析易知任务1与其他两个任务是独立的,但任务3依赖于任务2。任务1和任务2可以设计在两个平行执行的线程上实现,从而提升程序的性能。
下面我们将使用多线程的方式设计客户端程序。这个程序包含两个线程,线程1需要完成的任务是:

  • 连接服务器
  • 等待线程2加载XML文件的数据
  • 发送加载的数据

线程2需要完成的任务是:

  • 从XML文件中加载数据
  • 通知其他等待该数据的线程

demo

Tags:  C++ ,  Threads

Newer
Older
Copyright © Chen Yuan 2016-2017
Powered by Hugo & Pixyll. Hosted by GitHub Pages