Как работает OS Loaderlock - PullRequest
2 голосов
/ 20 июня 2010

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 20 июня 2010

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

  • Поток A получает блокировку A, а затем пытается получить блокировку B
  • Тем временем поток B получает блокировку B, а затем пытается получить блокировку A

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

0 голосов
/ 22 июня 2010
0 голосов
/ 20 июня 2010

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

Любое такое выполнение является недопустимым, поскольку оно может привести к взаимоблокировкам и использованию DLL до их инициализации загрузчиком операционной системы.1006 * Более подробную информацию можно найти здесь: LoaderLock MDA (веб-сайт MSDN)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...