OS Loaderlock如何工作

我试图更详细地了解如何使用操作系统loaderlock在加载和卸载Windows中的DLL

我知道,当一个新的线程被创build/销毁,或者一个新的DLL被加载/卸载时,每个加载的DLL都会得到通知。

那么这是否意味着DllMain函数在锁内运行,其他线程在运行时不能访问它,如果要在该函数中创build另一个线程,可能会挂起进程甚至是操作系统?

我的理解是正确的吗?

有什么地方可以解释这个吗?

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

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

一个运行DllMain的线程已经获得了一个隐式的O / S锁:因此他们(微软)认为,这个线程可能不安全的获取任何其他的第二个锁(例如,因为一个不同的线程可能已经拥有该锁,目前被隐藏的O / S锁定)。

那是对的。

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

更多信息可以在这里找到: LoaderLock MDA(MSDN网站)

Raymond Chen解释了这一点 。