Qt的QWaitCondition

来源:互联网 发布:java程序员怎么样 编辑:程序博客网 时间:2024/05/18 07:14

本文转载于http://blog.163.com/qimo601@126/blog/static/1582209320133910125784/

  对生产者和消费者问题的另一个解决办法是使用QWaitCondition,它允许线程在一定条件下唤醒其他线程。其中wakeOne()函数在条件满足时随机唤醒一个等待线程,而wakeAll()函数则在条件满足时唤醒所有等待线程。

1、bool wait (QMutex mutex,unsigned long time = ULONG_MAX)
    1) 释放锁定的mutex
    2) 在线程对象上等待

    mutex必须由调用线程进行初锁定 。注意调用wait的话,会自动调用unlock解锁之前锁住的资源,不然会造成死锁。线程1等待线程2来改变共享资源,从而达到一定的条件然后发出信号,使得线程1从wait中的阻塞状态中被唤醒。但是线程2想改变资源,却无法办到,因为线程1调用lock之后就在wait中blocking,了但是没有及时的unlock,那么这就构成了死锁的条件。所以说wait函数除了使调用线程切换到内核态之外,还自动unlock(&mutex)。

2、void wakeOne ()
      这将会唤醒所有等待QWaitCondition的线程。这些线程被唤醒的顺序依赖于操组系统的调度策略,并且不能被控制或预知。

3、void wakeAll ()

       这将会唤醒所有等待QWaitCondition的线程中的一个线程。这个被唤醒的线程依赖于操组系统的调度策略,并且不能被控制或预知。


0 0
原创粉丝点击