在多线程编程中,假设除了等待OS正在执⾏的线程之外,某个线程还必须等待某些条件满⾜才能执⾏,这时就会出现问题
- 这种情况下,线程会很⾃然地使⽤锁的机制来阻塞其他线程
- 因为这只是线程的轮流使⽤,并且该线程等待某些特定条件
- ⼈们会认为需要等待条件的线程,在释放互斥锁或读写锁之后进⼊了睡眠状态
- 这样其他线程就可以继续运⾏,当条件满⾜时,等待条件的线程将被另⼀个线程唤醒
在Qt中,专⻔提供了QWaitCondition
类来解决上述这样的问题
- 多个线程之间的调度是无序的,为了一定程度的干预线程之间的执行顺序,引入条件变量
特点:QWaitCondition
是Qt框架提供的条件变量类,⽤于线程之间的消息通信和同步
⽤途:在某个条件满⾜时等待或唤醒线程,⽤于线程的同步和协调
示例:QMutex mutex;
QWaitCondition condition;
---------------------------------------------------------------
mutex.lock();
while (!conditionFullfilled())
{
condition.wait(&mutex);
}
mutex.unlock();
---------------------------------------------------------------
mutex.lock();
changeCondition();
condition.wakeAll();
mutex.unlock();