代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

OS Loaderlock的工作原理

  •  2
  • Tony The Lion  · 技术社区  · 15 年前

    我试图更详细地了解如何使用OS loaderlock来加载和卸载Windows中的DLL。

    我知道当创建/销毁新线程或加载/卸载新DLL时,每个加载的DLL都会收到通知。

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

    有什么文章可以解释这一点吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   ChrisW    15 年前

    A deadlock

    • 线程A获取锁A,然后尝试获取锁B

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

        2
  •  0
  •   Mervin    15 年前

    这是正确的。

    任何这样的处决都是非法的,因为 DLL在初始化之前

    更多信息请参见: LoaderLock MDA (MSDN Website)

        3
  •  0
  •   JdeBP    15 年前