2010-06-20 2 views
1

Я пытаюсь понять в деталях, как используется loaderlock для ОС в отношении загрузки и выгрузки DLL в Windows.Как работает загрузчик ОС

Я понимаю, что каждая загруженная DLL получает уведомление, когда новый поток создается/уничтожается и загружается/выгружается новая DLL.

Значит ли это, что функция DllMain запускается внутри блокировки, и ни один другой поток не может получить к ней доступ во время ее запуска, и если вы должны создать другой поток в этой функции, вы можете повесить этот процесс или даже ОС ?

Правильно ли я понимаю?

Есть ли какая-нибудь статья где-нибудь, которая объясняет это?

ответ

1

deadlock может произойти, когда два потока пытаются получить два замка в другой последовательности.

  • Thread А получает блокировки, а затем пытается получить стопорное Аргументы B
  • Между тем поток B GetS блокировки B, а затем пытается получить блокировку A

А нить, которая работает DllMain уже приобрела неявное Блокировка O/S: поэтому они (Microsoft) считают, что для этого потока может быть небезопасно пытаться получить любую другую вторую блокировку (например, потому что другой поток уже может иметь эту блокировку и быть заблокирован в настоящее время при неявной блокировке O/S).

0

это правильно.

Любое такое исполнение является незаконным, поскольку это может привести к тупиков и использованию библиотек DLL, прежде чем они были инициализированы загрузчиком операционной системы.

Более подробную информацию можно найти здесь: LoaderLock MDA (MSDN Website)

Смежные вопросы