Разница между монитором и замком?

Какая разница между monitor и lock?

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

Хорошее объяснение было бы действительно полезно благодаря....

рассматривает

Ответ 1

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

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

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

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

bool lockTaken = false;
try
{
    Monitor.Enter(object, ref lockTaken);
    // Your code here...
}
finally
{
    if (lockTaken)
    {
        Monitor.Exit(object);
    }
}

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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