Тупик возникает в моем приложении, когда инициализация локальной статической переменной происходит в функции, вызванной из точки входа DLLMain с параметром DLL_THREAD_DETACH.Помощь Анализ взаимоблокировки
Ниже Windbg анализ
Это обычно вызывается другим потоком, содержащего блокировку загрузчика.
Ниже приведены замки.
CritSec Ntdll! LdrpLoaderLock + 0 при 7c97e178
LockCount 3
RecursionCount 1
OwningThread 17e8
EntryCount д
ContentionCount д
*** Locked
CritSec MSVCR80! __ APP_TYPE + 94 на 781c3bc8
LockCount 1
RecursionCount 1
OwningThread 1100
EntryCount 1
ContentionCount 1 *** Locked
#стек вызовов 17e8 Thread
781c3bc8 78132bd9 0777fde4 Ntdll! RtlEnterCriticalSection + 0x46
00000008 00000000 b87d2630 MSVCR80! _lock + 0x2e
0864ae10 08631d7f 0864ae10 EPComUtilities32 ! _onexit + 0x36
0864ae10 b87d2588 00000001 EPComUtilities32! atexit + 0x9
0777fea8 0864719f 08630000 EPComUtilities32! XCriticalSectionEx :: ThreadTerminated + 0x5f
08630000 00000003 00000000 EPComUtilities32! DllMain + 0x20
08630000 7c90118a 08630000 EPComUtilities32! __ DllMainCRTStartup + 0x7A
08630000 00000003 00000000 EPComUtilities32! _DllMainCRTStartup + 0x1d
Call Stack thread 1 100
000000b0 00000000 00000000 ntdll!ZwWaitForSingleObject + 0xc
000000b0 FFFFFFFF 00000000 kernel32! WaitForSingleObjectEx + 0xa8
000000b0 FFFFFFFF 06ce64e0 kernel32! WaitForSingleObject + 0x12
000480ba 000f4240 00000000 CATSysMultiThreading! CATThreads :: Регистрация + 0xf5
0012fcc8 00000004 00000000 JS0GROUP ! CATLM :: StopHB + 0xF4
d138509f 00416694 00000001 JS0GROUP! CATLM :: + 0x6b разрушать
00000000 00000000 00000000 MSVCR80! _cinit + 0xd6
00000000 0012fd6c 081e68d9 MSVCR80! Выход + 0xD
00000000 06d404f0 0998fb90 JS0GROUP! CATExit + 0x1D
00000000 004ef366 0000000d DNBPLMProvider! DNBEPLMTransactionMgt :: OnApplicationExit + 0x229
00000000 0012fd9c 004eabfc JS0GROUP! CATCallExits + 0x2bc
00000000 0012ff7c 0040cefd JS0GROUP! CATError NormalEnd + 0x31 00000000 06ce71d0 06ce71d0 JS0GROUP! CATExit + 0xc
00000007 06cdb120 059b61d8 DLMMfgContextSolver! Главная + 0x146d
FFFFFFFF FFFFFFFF bffde000 DLMMfgContextSolver! __ tmainCRTStartup + 0x10f
#Пожалуйста дать вам комментарии к понять, что могло вызвать тупик. Примечание: в тот момент я сделать статическую переменную как не статики проблема исчезает в этом контексте, например, публикуемую в форуме Deadlock occurs in Function Scoped Static variables (Thread Unsafe in VC++)
Попробуйте использовать глобальную переменную. – logout
Использование глобальной переменной может решить, но я хотел понять проблему. Почему локальная статическая переменная инициализации приводит к блокировке. Как вы видите стек вызовов Thread 17e8. В функции недействительного XCriticalSectionEx :: ThreadTerminated() { Const статический XEPComBSTR bstrMethod = __FUNCTION__; } Выполнение вышеуказанной локальной статической переменной bstrMethod инициализация, почему MSVCR80! _lock ??? – IRFAN