OS Loaderlock的工作原理

时间:2010-06-20 11:55:30

标签: windows dll multithreading locks

我试图更详细地了解如何在Windows中加载和卸载DLL时使用OS加载程序。

据我所知,在创建/销毁新线程和加载/卸载新DLL时,每个加载的DLL都会收到通知。

这是否意味着DllMain函数在一个锁内运行,没有其他线程可以在它运行时访问它,如果你要在该函数中创建另一个线程,你可以挂起进程甚至操作系统?

我的理解是否正确?

是否有某篇文章可以解释这一点?

3 个答案:

答案 0 :(得分:1)

当两个线程尝试以不同的顺序获取两个锁时,可能会发生deadlock

  • 线程A获取锁定A,然后尝试获取锁定B
  • 同时,线程B获得锁定B然后尝试获得锁定A

正在运行DllMain的线程已经获得了隐式的O / S锁:因此他们(Microsoft)认为该线程尝试获取任何其他第二锁(例如,因为不同的线程可能已经拥有)可能是不安全的锁定并且当前在隐式O / S锁定时被阻止。)

答案 1 :(得分:0)

这是正确的。

  

任何此类执行都是非法的,因为   它可能导致死锁和使用   DLL在初始化之前   通过操作系统的加载程序。

可在此处找到更多信息:LoaderLock MDA (MSDN Website)

答案 2 :(得分:0)