Семафор против мониторов - какая разница? - PullRequest
220 голосов
/ 07 сентября 2011

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

Ответы [ 6 ]

498 голосов
/ 07 сентября 2011

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

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

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

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

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

9 голосов
/ 21 мая 2013

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

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

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

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

6 голосов
/ 17 декабря 2013

Ответ в одну строку:

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

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

5 голосов
/ 07 сентября 2011

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

Монитор

Семафор

2 голосов
/ 17 августа 2015

Семафор:

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

Пример:

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

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

Монитор:

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

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

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

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

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

Взято из курса открытого курса M362 блока 3 "Взаимодействующий процесс".материал.

...