什么是装载机锁?

我正在处理线程,并有潜在的死锁问题。 有人向我提到一个装载机锁。

我无法在网上find很多信息。 有人可以帮我解释一下,“什么是装载机锁 ”?

例如,查看这个问题:

装载机锁定错误

加载器锁定的一般概念:系统在锁内部运行DllMain的代码(作为同步锁)。 因此,在DllMain运行不重要的代码是“要求死锁”

我刚才提到的答案是基于这篇文章:

另一个在DllMain不要做任何可怕事情的原因是:无意之间的僵局

您的DllMain函数在加载程序锁中运行,这是操作系统允许您在其中一个内部锁持有时运行代码的几次之一。 这意味着您必须格外小心,不要违反DllMain的锁定层级; 否则,你正在寻求僵局。

加载程序锁定由需要访问加载到进程中的DLL列表的任何函数执行。 这包括像GetmoduleeHandleGetmoduleeFileName函数。 如果您的DllMain进入临界区或在同步对象上等待,并且临界区或同步对象由某个代码所拥有,而这些代码又等待加载程序锁定,则只会创建一个死锁:

 // global variable CRITICAL_SECTION g_csGlobal; // some code somewhere EnterCriticalSection(&g_csGlobal); ... GetmoduleeFileName(MyInstance, ..); LeaveCriticalSection(&g_csGlobal); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { ... case DLL_THREAD_DETACH: EnterCriticalSection(&g_csGlobal); ... } ... } 

请仔细阅读整篇文章以充分理解。