微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是装载机锁?

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

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

如何在linux内核中使用lockdepfunction进行死锁检测

pthread_cond_signal死锁

与pthreads和CreateThread的死锁

是否有可能推进僵局线程? 卡在WaitForSingleObject

如何在Linux中摆脱僵局

例如,查看这个问题:

装载机锁定错误

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

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

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

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

加载程序锁定由需要访问加载到进程中的DLL列表的任何函数执行。 这包括像GetmoduleeHandle和GetmoduleeFileName函数。 如果您的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); ... } ... }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐