Разница между Монитором и блокировкой?
-
05-09-2019 - |
Решение
Например, в C # .NET оператор lock эквивалентен:
Monitor.Enter(object);
try
{
// Your code here...
}
finally
{
Monitor.Exit(object);
}
Однако имейте в виду, что Монитор также может Wait()
и Pulse()
, которые часто полезны в сложных ситуациях многопоточности.
Редактировать: В более поздних версиях .NET framework это было изменено на:
bool lockTaken = false;
try
{
Monitor.Enter(object, ref lockTaken);
// Your code here...
}
finally
{
if (lockTaken)
{
Monitor.Exit(object);
}
}
Другие советы
Они связаны.Например, в C # замок заявление - это простая обертка try-finally вокруг вход в Монитор и выход из одного когда закончите.
Мониторы представляют собой "полуавтоматические" блокировки с помощью компилятора.Они позволяют заявлять synchronized
методы в классах и т.д.Это просто другой подход к обеспечению взаимного исключения.Я нашел эта книга это должно быть наиболее полное объяснение концепций, хотя в основном оно предназначено для разработчиков ОС.
Блокировка обеспечивает взаимное исключение.
Монитор связывает данные, подлежащие защите, и примитивы взаимного исключения и синхронизации, необходимые для защиты доступа к данным.
Синхронизация используется, напримеркогда вам нужно, чтобы один поток дождался, пока произойдет событие (например, дождитесь, пока другой поток поместит элемент в очередь).
Мониторы - это конструкция на языке программирования, которая выполняет то же самое, что и полуфоры / блокировки, но мониторы управляют общими данными путем синхронизации во время выполнения.Напротив, блокировки защищают общие данные простым "вращением", что может привести к плохой загрузке процессора.
Разницы нет, блокировка генерирует монитор.Вход и монитор.Выход в блоке try / finally.Использование Monitor over lock позволяет выполнять точную настройку, поскольку в нем есть Pulse и PulseAll.Вы также можете использовать альтернативную обработку, если вам не удастся получить блокировку с помощью TryEnter.
Сфокусируйтесь только на взаимном исключении, но Moniter автоматически обеспечивает взаимное исключение.
Таким образом, нам не нужно беспокоиться об использовании взаимного исключения в Monitor.Вместо МЕНЯ нам нужно помнить о сикронзировании только тогда, когда мы занимаемся программированием.
Moniter обеспечивает более систематический способ программирования.Поэтому он является более продвинутым.
Монитор - это концепция, а Блокировка - фактическая реализация.