装载机锁定错误
时间:2020-03-05 18:51:28 来源:igfitidea点击:
我通过在C#中编写代码来构建C ++ dll。
我说错了
LoaderLock was detected Message: Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
我尝试搜索该错误的确切含义,但是我写的文章毫无意义,主要是说这只是一个警告,我应该在Visual Studio中将其关闭。
其他解决方案似乎是由于iTunes引起的,或者是在使用DirectX编程时发生了此问题。我的问题与两个都不相关。
谁能解释,这实际上意味着什么?
解决方案
回答
加载程序锁定的一般思想:
系统在锁中(如同步锁中)在DllMain中运行代码。因此,在DllMain中运行非平凡的代码就是"寻求死锁",如此处所述。
问题是,为什么要尝试在DllMain中运行代码?在DllMain的上下文中运行此代码是否至关重要,还是可以生成一个新线程并在其中运行代码,而不必等待代码在DllMain内完成执行?
我认为特定于托管代码的问题是,运行托管代码可能涉及加载CLR之类的东西,并且不知道在那里可能发生什么会导致死锁……我不会听从"禁用此警告"的建议"如果我是我们,因为很有可能我们会发现在某些情况下应用程序意外挂起。
回答
我们需要转到菜单Debug-> Exceptions,打开Managed Debugging Assistants,找到LoaderLock并取消选中