Разница между монитором и замком?
Какая разница между 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);
}
}
Ответ 2
Они связаны. Например, в С# оператор lock представляет собой простую оболочку try-finally вокруг войти в Монитор и выйти из одного после завершения.
Ответ 3
Мониторы - это "полуавтоматические" блокировки, основанные на компиляторах. Они позволяют объявлять методы synchronized
для классов и т.д. Это просто другой подход к обеспечению взаимного исключения. Я нашел эту книгу как наиболее полное объяснение концепций, хотя в основном это касалось разработчиков ОС.
Ответ 4
Блокировка обеспечивает взаимное исключение.
Монитор связывает защищаемые данные и примитивы взаимного исключения и синхронизации, необходимые для защиты доступа к данным.
Синхронизация используется, например, когда вам нужен один поток, чтобы дождаться события (например, дождитесь, пока другой поток помещает элемент в очередь).
Ответ 5
Мониторы - это конструкция языка программирования, которая делает то же самое, что и полуфоры/блокировки, но мониторы управляют общими данными путем синхронизации во время выполнения. Напротив, блокировки защищают общие данные, просто "вращая", что может привести к плохому использованию ЦП.
Ответ 6
Нет разницы, блокировка генерирует Monitor.Enter и Monitor.Exit внутри блока try/finally. Использование Monitor over lock позволяет вам точно настраивать, потому что у него есть Pulse и PulseAll. Вы также можете иметь альтернативную обработку, если не сможете получить блокировку с помощью TryEnter.
Ответ 7
Блокировка фокусируется только на взаимном исключении, но
Moniter автоматически обеспечивает взаимное исключение.
Поэтому нам не нужно беспокоиться об использовании взаимного исключения в Monitor.
Вместо ME мы должны заботиться о sycronzing только при программировании.
Монитор обеспечивает более систематический способ программирования.
Поэтому он более продвинутый.
Ответ 8
Монитор - это концепция, а блокировка - это фактическая реализация.