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

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

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

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

С уважением

8 ответов

Решение

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

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 методы на уроках и т. д. Это просто другой подход к обеспечению взаимного исключения. Я обнаружил, что эта книга является наиболее полным объяснением концепций, хотя в основном она предназначена для разработчиков ОС.

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

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

Насколько я понял, монитор - это набор принципов синхронизации потоков, а блокировки - это способ, которым мониторы реализованы в Java, наряду с функциями "взаимодействия потоков", такими как ожидание и уведомление. Таким образом, эффективно, если мы попытаемся сформировать точную взаимосвязь между двумя понятиями, блокировки будут одной частью реализации мониторов (другая - это механизмы ожидания и уведомления). Пожалуйста, поправьте меня, если я ошибаюсь, но я был бы очень признателен, если бы исправление было очень конкретным.

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

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

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

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

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

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

Другие вопросы по тегам