我正在GDB中運行我的程序。我的程序需要爲其工作創建16個線程。所有這些工作都很好。最後我得到的錯誤QMutex::lock: Deadlock detected in thread 0xfe8
這裏是GDB輸出QMutex :: lock:線程中檢測到死鎖0xfe8(主線程?)
(gdb) run
Starting program: C:\dgrfb.run\client/DGRFB.exe
[New thread 4076.0xfe8]
[New thread 4076.0x368]
warning: >> Socket State Changed: QAbstractSocket::HostLookupState
warning: >> Socket State Changed: QAbstractSocket::ConnectingState
[New thread 4076.0x4b8]
warning: >> Socket State Changed: QAbstractSocket::ConnectedState
[New thread 4076.0x49c]
warning: Rect Area 0 2 DG::UpdateThread(0xa0d5220)
warning: Rect Area 0 3 DG::UpdateThread(0xa0d5548)
warning: Rect Area 1 0 DG::UpdateThread(0xa0d5870)
warning: Rect Area 1 1 DG::UpdateThread(0xa0d5b98)
warning: Rect Area 1 2 DG::UpdateThread(0xa0d5ec0)
warning: Rect Area 1 3 DG::UpdateThread(0xa0d61e8)
warning: Rect Area 2 0 DG::UpdateThread(0xa0d6510)
warning: Rect Area 2 1 DG::UpdateThread(0xa0d6838)
warning: Rect Area 2 2 DG::UpdateThread(0xa0d6b60)
warning: Rect Area 2 3 DG::UpdateThread(0xa0d6e88)
[New thread 4076.0x540]
warning: Rect Area 3 0 DG::UpdateThread(0xa0d71b0)
warning: Rect Area 3 1 DG::UpdateThread(0xa0d7568)
warning: Rect Area 3 2 DG::UpdateThread(0xa0d7cc0)
warning: Rect Area 3 3 DG::UpdateThread(0xa0d7fe8)
[New thread 4076.0x670]
[New thread 4076.0x6dc]
[New thread 4076.0x674]
[New thread 4076.0x3ac]
[New thread 4076.0x684]
[New thread 4076.0x434]
[New thread 4076.0x44c]
[New thread 4076.0x7e8]
[New thread 4076.0x408]
[New thread 4076.0x7e0]
[New thread 4076.0x42c]
[New thread 4076.0x814]
[New thread 4076.0x6f8]
[New thread 4076.0x8a4]
warning: QThread(0x3d58d8) tick
warning: Rect # 0 0 100 56
warning: Unmatched true
warning: Updating 0 0
warning: QMutex::lock: Deadlock detected in thread 0xfe8
現在哪個線程0xfe8
是什麼?它是主線程嗎? 首先,我以爲我調用了兩次相同的mutex.lock()
。或者func_a()
和func_b()
正在使用相同的互斥鎖。那導致了僵局。但沒有發現任何這種情況。所以開始調查?
雅我在大多數的地方使用'QMutexLocker'。並仔細看看第一行上的gdb輸出'[New thread 4076.0xfe8]'(見上)和'QMutex :: lock:最後一個線程0xfe8中檢測到的死鎖'。這是否意味着主線程處於死鎖狀態?希望我能清楚地說明爲什麼我專注於'0xfe8'的任何線索?根據此輸出的 – 2011-04-28 06:37:40
0xfe8是創建的第一個線程。所以是的,它是檢測到死鎖的gui線程(主線程) – 2011-04-28 07:25:52
警告:QThread(0x3d58d8)tick部分意味着另一個線程已經運行並鎖定了主線程也需要的東西。主線程阻塞和死鎖在這一點上,這是我從這個輸出瞭解。 – 2011-04-28 07:33:41