Почему я добираюсь, “LoaderLock был обнаружен”, предупредив при отладке?

Вы можете использовать scalaz :

import scalaz._, Scalaz._

val m1 = Map('a -> 1, 'b -> 2)
val m2 = Map('b -> 3, 'c -> 4)

m1.mapValues{List(_)} |+| m2.mapValues{List(_)}
// Map('b -> List(2, 3), 'c -> List(4), 'a -> List(1))

Вы можете использовать Set(_) вместо List(_), чтобы получить Set s в качестве значений в Map.

См. Полугруппу в шпаргалке скалаза (или в изучении скаляза ) для подробностей об операторе |+|.

Для Int |+| работает как +, для List - как ++, для Map он применяет |+| к значениям тех же ключей.

15
задан Branko Dimitrijevic 29 January 2014 в 14:07
поделиться

2 ответа

Блокировка загрузчика - это блокировка всего процесса, используемая системой для синхронизации доступа к загрузке DLL в адресное пространство процесса. Функции, которые загружают библиотеки DLL, бесплатные библиотеки DLL, запрашивают информацию о DLL и т. Д., Получают блокировку загрузчика. Что обычно больше всего влияет на разработчиков, так это то, что блокировка загрузчика также удерживается во время работы DllMain - это означает, что блокировка ОС, о которой вы обычно не знаете, может удерживаться во время выполнения вашего кода.

Блокировка загрузчика может быть рассматривается как находящийся на очень низком уровне иерархии блокировок. Код, работающий под блокировкой загрузчика во время DllMain, может быть причиной взаимоблокировок. Например, у CLR есть собственный набор внутренних блокировок, которые он может удерживать при загрузке DLL. Если вы вызываете управляемый код из DllMain, вы можете заставить CLR в вашем потоке получить одну из этих блокировок, удерживая блокировку загрузчика. Если бы среда CLR в другом потоке получила эту блокировку (что привело к блокировке исходного потока в DllMain), а затем попыталась загрузить DLL, которая получила бы блокировку загрузчика, ваш процесс зашел бы в тупик.

Похоже, CLR пытается это сделать. превентивно обнаруживать запуск управляемого кода под блокировкой загрузчика. Когда вы видите стек из этого сбоя в отладчике, определите, что вызывает запуск вашего управляемого кода из DllMain, и удалите его.

Похоже, CLR пытается упреждающе обнаружить работающий управляемый код под блокировкой загрузчика. Когда вы видите стек из этого сбоя в отладчике, определите, что вызывает запуск вашего управляемого кода из DllMain, и удалите его.

Похоже, CLR пытается упреждающе обнаружить работающий управляемый код под блокировкой загрузчика. Когда вы видите стек из этого сбоя в отладчике, определите, что вызывает запуск вашего управляемого кода из DllMain, и удалите его.

16
ответ дан 1 December 2019 в 03:43
поделиться

По моему опыту работы с AutoCAD, предупреждение LoaderLock можно игнорировать. Это не признак того, что ваш код делает что-то не так, а скорее возникает предупреждение из-за того, как AutoCAD загружает и инициализирует ваше приложение.

3
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: