我有QMutex和QQueue作为基于QThread的课程的成员。我在popEvent和pushEvent方法中锁定QMutex(通过QMutexLocker)。当我在从主线程调用的push方法中锁定它时,它可以工作。当我从子线程循环调用pop函数时,它会在创建QMutexLock时崩溃。怎么了? QMutex和QQueue应该是全球性的还是静态的?基于QThread的类是在主线程堆(堆而不是堆栈)上创建的。
答案 0 :(得分:0)
互斥锁由拥有它的线程“拥有”。它不能被另一个线程释放。你可能想要一个信号量,而不是一个互斥量。