82 QWaitCondition

82.1 睡眠与唤醒

QWaitCondition类所表示的等待条件,可以与QMutex类所表示的互斥体结合使用,在执行操作的条件不满足时,陷入睡眠,同时解锁所持有的互斥体,以使其它线程得以执行为其创造条件的操作,待条件满足时再被唤醒,重新锁定互斥体后,执行那些有赖于该条件的操作。

82.2 生产者/消费者模型

生产者负责生产数据,消费者负责消费数据,二者共享同一个数据缓冲区。

82.2.1 生产者线程

不满
锁定互斥体
检查缓冲区
睡入等待条件,同时解锁互斥体
被唤醒,重新锁定互斥体
生产数据,压入缓冲区
唤醒正在睡眠的消费者
解锁互斥体

82.2.2 消费者线程

不空
锁定互斥体
检查缓冲区
睡入等待条件,同时解锁互斥体
被唤醒,重新锁定互斥体
弹出缓冲区,消费数据
唤醒正在睡眠的生产者
解锁互斥体

82.3 案例

82.3.1 创建项目

通过QtCreator,在C:\Users\Minwei\Projects\Qt路径下,创建名为WaitCondition的控制台(Console)项目。

82.3.2 实现功能

C:\Users\Minwei\Projects\Qt\WaitCondition\main.cpp:

82.3.3 测试验证

运行效果如图所示: