我试图更详细地了解操作系统加载程序锁是如何与 Windows 中 DLL 的加载和卸载相关的。
我知道当创建/销毁新线程和/或加载/卸载新 DLL 时,每个加载的 DLL 都会收到通知。
那么这是否意味着 DllMain 函数在锁内运行,并且在它运行时没有其他线程可以访问它,如果您要在该函数中创建另一个线程,您可以挂起进程甚至操作系统?
我的理解正确吗?
有什么文章可以解释这一点吗?
我试图更详细地了解操作系统加载程序锁是如何与 Windows 中 DLL 的加载和卸载相关的。
我知道当创建/销毁新线程和/或加载/卸载新 DLL 时,每个加载的 DLL 都会收到通知。
那么这是否意味着 DllMain 函数在锁内运行,并且在它运行时没有其他线程可以访问它,如果您要在该函数中创建另一个线程,您可以挂起进程甚至操作系统?
我的理解正确吗?
有什么文章可以解释这一点吗?
当两个线程尝试以不同的顺序获取两个锁时,可能会发生死锁。
运行 DllMain 的线程已经获得了一个隐式的 O/S 锁:因此他们(微软)认为该线程尝试获得任何其他第二个锁可能是不安全的(例如,因为不同的线程可能已经拥有该锁并且当前被隐式 O/S 锁阻塞)。