Вопрос

В чем разница между монитор и a замок?

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

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

с уважением

Это было полезно?

Решение

Например, в 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 обеспечивает более систематический способ программирования.Поэтому он является более продвинутым.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top