Семафор против мониторов - какая разница?

Каковы основные различия между монитором и семафором?

Ответ 1

A Монитор - это объект, предназначенный для доступа из нескольких потоков. Функции-члены или методы объекта-монитора будут обеспечивать взаимное исключение, поэтому только один поток может выполнять любое действие над объектом в данный момент времени. Если один поток в настоящее время выполняет функцию-член объекта, то любой другой поток, который пытается вызвать функцию-член этого объекта, должен будет дождаться завершения первого.

A Семафор - объект нижнего уровня. Вы можете использовать семафор для реализации монитора. Семафор по существу является просто счетчиком. Когда счетчик положителен, если поток пытается получить семафор, тогда он разрешен, а счетчик уменьшается. Когда поток выполняется, он освобождает семафор и увеличивает счетчик.

Если счетчик уже равен нулю, когда поток пытается получить семафор, тогда он должен ждать, пока другой поток не освободит семафор. Если несколько потоков ждут, когда поток освобождает семафор, тогда один из них получает его. Поток, который освобождает семафор, не обязательно должен быть тем же самым потоком, который его приобрел.

Монитор похож на общественный туалет. За один раз может войти только один человек. Они запирают дверь, чтобы кто-то еще не заходил, не делал их, а затем отпирал, когда они уходили.

Семафор похож на место проката велосипедов. У них есть определенное количество велосипедов. Если вы попробуете нанять велосипед и у вас есть один свободный, вы можете его взять, иначе вы должны подождать. Когда кто-то возвращает свой велосипед, тогда кто-то может его взять. Если у вас есть велосипед, то вы можете дать его кому-то другому, чтобы вернуться --- в место проката велосипедов не волнует, кто вернет его, если они вернут свой велосипед.

Ответ 2

Следующее объяснение фактически объясняет, как wait() и signal() монитора отличаются от P и V семафора.

Операции wait() и сигнала() при переменных условий в мониторе аналогичны P и V при подсчете семафоров.

Оператор ожидания может блокировать выполнение процесса, а оператор сигнала может привести к разблокировке другого процесса. Однако между ними существуют различия. Когда процесс выполняет операцию P, он не обязательно блокирует этот процесс, потому что счетный семафор может быть больше нуля. Напротив, когда выполняется команда wait, она всегда блокирует процесс. Когда задача выполняет операцию V на семафоре, она либо блокирует задачу, ожидающую на этом семафоре, либо увеличивает счетчик семафора, если нет разблокировки задачи. С другой стороны, если процесс выполняет оператор сигнала, когда нет другого процесса для разблокирования, на переменную условия не влияет. Другое различие между семафорами и мониторами заключается в том, что пользователи, пробуждаемые операцией V, могут возобновить выполнение без задержки. Напротив, пользователи, активируемые сигнальной операцией, перезапускаются только тогда, когда монитор разблокирован. Кроме того, решение для мониторинга более структурировано, чем решение с семафорами, поскольку данные и процедуры инкапсулируются в одном модуле и что взаимное исключение обеспечивается автоматически реализацией.

Ссылка: здесь для дальнейшего чтения. Надеюсь, что это поможет.

Ответ 3

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

Monitor

Semaphore

Ответ 4

Ответ на одну линию:

Монитор: на мониторе может выполняться только один поток за раз. (необходимо создать блокировку для выполнения одного потока)

Семафор: блокировка, которая защищает общий ресурс. (необходимо получить блокировку для доступа к ресурсу)

Ответ 5

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

Оба монитора и семафоры используются с той же целью - синхронизация потоков. Но мониторы проще использовать, чем семафоры, потому что они обрабатывают все детали сбора и освобождения блокировки.

Другим отличием при использовании семафоров является то, что каждая процедура, получающая доступ к совместно используемому ресурсу, должна явно получить блокировку перед использованием ресурса. Это можно легко забыть при кодировании подпрограмм, касающихся многопоточности. Мониторы, в отличие от семафоров, автоматически приобретают необходимые блокировки.

Ответ 6

Когда семафор используется для защиты критической области, нет прямой связи между семафором и защищаемыми данными. Это часть причины, по которой семафоры могут быть рассеяны вокруг кода, и почему легко забыть называть wait или уведомлять, и в этом случае результат будет, соответственно, нарушать взаимное исключение или постоянно блокировать ресурс.

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

Перед продолжением монитор имеет встроенный механизм синхронизации условий в виде переменной условия. Если условие не выполняется, процесс должен ждать, пока он не будет уведомлен об изменении условия. Когда процесс ожидает синхронизации условий, реализация монитора учитывает проблему взаимного исключения и позволяет другому процессу получить доступ к монитору.

Взято из учебного материала Open University M362 3 "Interacting process".

Ответ 7

Семафор:

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

Пример:

  • Счетчик позволяет только 50 пассажирам приобретать 50 мест (общий ресурс) любого театра/автобуса/поезда/развлечения/классной комнаты. И позволить новому Пассажиру только, если кто-то освободит место.
  • Двоичный флаг, указывающий статус свободной/занятой любой ванной комнаты.
  • Светодиодные индикаторы являются хорошим примером флагов. Они контролируют поток путем регулирования прохода транспортных средств на дорогах (общий ресурс).

Флаги показывают только текущее состояние ресурса, отсутствие счета или любую другую информацию об ожидающих или запущенных объектах ресурса.

Монитор:

A Монитор синхронизирует доступ к объекту, связываясь с потоками, заинтересованными в объекте, предлагая им получить доступ или ждать, пока какое-то условие станет истинным.

Пример:

  • Отец может выступать в качестве монитора для своей дочери, позволяя ей встречаться только с одним парнем за раз.
  • Школьный учитель, использующий дубинку, чтобы позволить одному ребенку говорить в классе.
  • Наконец, технический, транзакции (через потоки) объекта Account синхронизированы для обеспечения целостности.