翻译自Qt帮助文档:Wait Condition Example
用Qt证明多线程编程。
Wait Condition 例子展示了如何使用 QWaitCondition 和 QMutex 来控制对一个循环缓冲区的访问,生产者线程和消费者线程共享该循环缓冲区。
生产者线程往缓冲区写数据,直到缓冲区的尾部,然后从缓冲区开头重新开始重写已经存在的数据。当数据被生产出来后消费者线程读取数据并写道标准错误中。
Wait Conditions 使高级并发成为可能,比单独使用mutexes的可能性大。如果想访问QMutex控制的缓冲区,消费者线程和生产者线程不能同时访问缓冲区。然而,让两个线程同时访问缓冲区的不同部分是没有什么害处的。
这个例子包括两个类:生产者(Producer)和 消费者(Consumer)。它们都继承了QThread。这两个类通过循环缓冲区交互,保护缓冲区的同步工具设为全局变量。
使用 QWaitCondition 和 QMutex 可以解决生产者-消费者的问题,另一种替代的解决方法就是使用QSemaphore。
全局变量
让我们从循环缓冲区和相关的同步工具开始吧: