本文主要是介绍QT中一种隐蔽的死锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
造成死锁的情况只有两种:
1.单线程死锁:同一线程对同一个锁连续加锁两次会造成死锁;
延伸:在同一个线程中,一个事件分支中对锁A已经加锁,并且引用了QCoreApplication::processEvents(QEventLoop::AllEvents, 100)或者QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents, 100);另外一个timeEvent如果也对锁A加锁,那么在事件结构进行的时候锁A被同时加锁两次,造成死锁。
这里有个小的知识点:QEventLoop::ExcludeUserInputEvents无法阻止超时事件但可以阻止用户输入事件。
这种情况如何避免:timeEvent改为子线程,增加一个线程。
2.多线程死锁:
尝尝由于加了2把以上的锁造成,需要注意加锁解锁的顺序,按照1221的顺序去加锁解锁。
所以锁的最好形式是一个线程一把锁,避免在timeEvent中加锁!
#include <QCoreApplication>
#include <
这篇关于QT中一种隐蔽的死锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!