Need of Event Handling

Need of Event Handling

本文将集中讨论多线程环境下的事件处理机制。有时线程需要等待某事件发生,例如条件变量成为真或由另一个线程完成的任务。

举个例子,应用处理以下的任务:

  1. 与服务器握手;
  2. 从文件读取数据;
  3. 处理读出来的数据;

在上面的任务中,任务1是独立的,而任务3则依赖于任务2。因此我们可以将该应用拆分为2个线程去处理:

img

创建一个默认值为false的布尔全局变量。在线程2中将其值设置为true,并且线程1在循环中检查其值,一旦变为真,线程1将继续处理数据。但由于它是两个线程共享的全局变量,因此需要与互斥锁同步。

不过这种方式有以下的缺点:

线程需要持续争取锁,而这是为了检查全局变量,这种方式会消耗CPU使得线程1变慢。

比较好的方式是使用信号量来解决这个问题。