Разница между монитором и замком? - PullRequest
11 голосов
/ 23 мая 2009

В чем разница между монитором и блокировкой ?

Если блокировка - это просто реализация взаимного исключения, то является ли монитор просто способом использования времени ожидания между выполнениями метода?

Хорошее объяснение было бы очень полезно, спасибо ....

1011 * привет *

Ответы [ 8 ]

14 голосов
/ 23 мая 2009

Например, в C # .NET оператор блокировки эквивалентен:

Monitor.Enter(object);
try
{
    // Your code here...
}
finally
{
    Monitor.Exit(object);
}

Однако имейте в виду, что Monitor также может Wait() и Pulse(), которые часто полезны в сложных ситуациях многопоточности.

Edit: В более поздних версиях .NET Framework это было изменено на:

bool lockTaken = false;
try
{
    Monitor.Enter(object, ref lockTaken);
    // Your code here...
}
finally
{
    if (lockTaken)
    {
        Monitor.Exit(object);
    }
}
4 голосов
/ 23 мая 2009

Они связаны. Например, в C # оператор lock представляет собой простую оболочку try-finally вокруг при входе в Monitor и при выходе из одного по завершении.

1 голос
/ 23 мая 2009

Мониторы - это "полуавтоматические" блокировки с помощью компилятора. Они позволяют объявлять synchronized методы для классов и т. Д. Это просто другой подход к обеспечению взаимного исключения. Я нашел эту книгу наиболее полным объяснением концепций, хотя в основном она предназначена для разработчиков ОС.

0 голосов
/ 19 ноября 2013

Монитор - это концепция, а Lock - фактическая реализация.

0 голосов
/ 04 июня 2013

Разницы нет, блокировка генерирует Monitor.Enter и Monitor.Exit в блоке try / finally. Использование монитора над блокировкой позволяет выполнить точную настройку, поскольку он имеет Pulse и PulseAll. Вы также можете иметь альтернативную обработку, если не сможете получить блокировку с помощью TryEnter.

0 голосов
/ 20 марта 2012

Блокировка фокусировки только на взаимном исключении, но Монитор обеспечивает взаимное исключение автоматически.

Так что нам не нужно беспокоиться об использовании взаимного исключения в Monitor. Вместо ME нам нужно учитывать sycronzing только тогда, когда мы занимаемся программированием.

Монитор обеспечивает более систематический способ программирования. Поэтому он более продвинутый.

0 голосов
/ 07 апреля 2010

Monitors - это конструкция на языке программирования, которая выполняет те же функции, что и полуфоры / блокировки, но Monitors контролирует общие данные путем синхронизации во время выполнения. Напротив, блокировки защищают общие данные просто «вращением», что может привести к плохой загрузке ЦП.

0 голосов
/ 23 мая 2009

Блокировка обеспечивает взаимное исключение.

Монитор связывает защищаемые данные и примитивы взаимного исключения и синхронизации, необходимые для защиты доступа к данным.
Синхронизация используется, например, когда вам нужен один поток, чтобы дождаться события (например, дождаться, пока другой поток не поместит элемент в очередь).

...