QMutex :: lock: В потоке 0xfe8 обнаружен тупик - PullRequest
2 голосов
/ 28 апреля 2011

Я запускаю мою программу в GDB. Моя программа должна создать 16 потоков для своей работы. и все это прекрасно работает. в конце я получаю ошибку QMutex::lock: Deadlock detected in thread 0xfe8 здесь вывод GDB

(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() используют один и тот же мьютекс. это вызывает тупик. Но не найдено ни одного из таких сценариев. Так где же начать расследование?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2011

Я видел это сообщение, когда дважды пытался заблокировать мьютекс из одной и той же команды.Исправление рекурсивного QMutex исправления.

0 голосов
/ 28 апреля 2011

Очень сложно ответить, какая нить вызывает взаимоблокировку. Однако, как правило, старайтесь использовать QMutexLocker , чтобы максимально избежать мертвых блокировок. Таким образом, ваш мьютекст будет разблокирован автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...