Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 检查哪个线程锁定了QMutex_Multithreading_Qt_Deadlock_Qmutex - Fatal编程技术网

Multithreading 检查哪个线程锁定了QMutex

Multithreading 检查哪个线程锁定了QMutex,multithreading,qt,deadlock,qmutex,Multithreading,Qt,Deadlock,Qmutex,在数据库程序中执行某些操作时,我遇到了一个奇怪的死锁。关键点是线程尝试锁定QMutex时: QMutexLocker locker(&tableMutex_); 这使得程序陷入困境 我很困惑,因为没有其他线程——AFAIK——可以访问这个互斥体。我现在要做的是找出哪个线程锁定了它。我该怎么做呢?在调试器中中断挂起的程序,并检查所有线程的堆栈跟踪。我这样做了,这就是我如何找到它被卡住的地方。但是它可能被锁定在数千行代码中的任何地方。@TomášZato:如果您只使用QMutexLocke

在数据库程序中执行某些操作时,我遇到了一个奇怪的死锁。关键点是线程尝试锁定
QMutex
时:

QMutexLocker locker(&tableMutex_);
这使得程序陷入困境


我很困惑,因为没有其他线程——AFAIK——可以访问这个互斥体。我现在要做的是找出哪个线程锁定了它。我该怎么做呢?

在调试器中中断挂起的程序,并检查所有线程的堆栈跟踪。

我这样做了,这就是我如何找到它被卡住的地方。但是它可能被锁定在数千行代码中的任何地方。@TomášZato:如果您只使用
QMutexLocker
或类似的RAII机制锁定互斥体,那么检查其他线程是否在QMutexLocker存在的作用域中应该不会太难。可能同一线程锁定互斥体两次。尝试使用QMutex的递归版本(将
QMutex::recursive
传递给QMutex构造函数)