本文章为原创,如引用请指明出处
- 问:QWaitCondition的 wake() ,wakeall() 函数唤醒的是哪些线程呢?
是不是在全局范围内该类的各个对象造成的悬挂线程都可以被唤醒呢?
回答:不是。通过自己编写了一个例子证明:
QWaitCondition唤醒的只是由某个具体的QWaitCondition的对象(例如,A)通过和若干个QMutex协作,阻塞的线程,才能通过 A.wakeOne(),或 A.wakeAll() 唤醒。
如有需要可留言,将例子上传。
- 个人认为线程同步有两种方式
主动方式,如互斥量,信号量。特点:阻塞的线程主动侦测是否可以运行,不需要唤醒
被动方式,如 QWaitCondition 。特点:阻塞了线程,并且在条件允许的情况下通过 wake /wakeall 将阻塞的线程激活继续运行。