Каковы основные различия между монитором и семафором ?
multithreading
semaphore
monitor
user919860
источник
источник
Ответы:
Монитор представляет собой объект , предназначенный для быть доступно из нескольких потоков. Функции-члены или методы объекта монитора будут обеспечивать взаимное исключение, поэтому только один поток может выполнять какое-либо действие над объектом в данный момент времени. Если один поток в настоящее время выполняет функцию-член объекта, то любой другой поток, который пытается вызвать функцию-член этого объекта, должен будет ждать, пока первый не завершится.
Семафор является объектом более низкого уровня. Вы можете использовать семафор для реализации монитора. Семафор - это просто счетчик. Когда счетчик положителен, если поток пытается получить семафор, он разрешается, и счетчик уменьшается. Когда поток завершен, он освобождает семафор и увеличивает счетчик.
Если счетчик уже равен нулю, когда поток пытается получить семафор, он должен ждать, пока другой поток не освободит семафор. Если несколько потоков ожидают, когда поток выпускает семафор, то один из них получает его. Поток, который выпускает семафор, не обязательно должен быть тем же потоком, который его получил.
Монитор похож на общественный туалет. Только один человек может войти одновременно. Они закрывают дверь, чтобы никто не мог войти, делают свое дело, а затем отпирают, когда уходят.
Семафор походит на место проката велосипедов. У них есть определенное количество велосипедов. Если вы попытаетесь взять напрокат велосипед, а у него есть один бесплатный, то вы можете взять его, иначе вам придется подождать. Когда кто-то возвращает свой велосипед, кто-то другой может взять его. Если у вас есть велосипед, то вы можете дать его кому-нибудь еще, чтобы его вернуть - пункт проката велосипедов не заботится о том, кто его вернет, если он вернет свой велосипед.
источник
Следующее объяснение фактически объясняет, как wait () и signal () монитора отличаются от P и V семафора.
Ожидания () и сигнал () операции по условию переменных в мониторе аналогичны P и V операций по подсчету семафоров .
Оператор ожидания может блокировать выполнение процесса, а оператор сигнала может вызвать разблокировку другого процесса. Тем не менее, есть некоторые различиямежду ними. Когда процесс выполняет P-операцию, он не обязательно блокирует этот процесс, потому что счетный семафор может быть больше нуля. Напротив, когда выполняется оператор ожидания, он всегда блокирует процесс. Когда задача выполняет V-операцию с семафором, она либо разблокирует задачу, ожидающую этот семафор, либо увеличивает счетчик семафора, если задача не разблокируется. С другой стороны, если процесс выполняет оператор сигнала, когда нет другого разблокируемого процесса, это не влияет на переменную условия. Другое различие между семафорами и мониторами заключается в том, что пользователи, пробуждаемые операцией V, могут без задержки возобновить выполнение. Наоборот, пользователи, пробуждаемые сигнальной операцией, перезапускаются только тогда, когда монитор разблокирован. К тому же,
Ссылка: здесь для дальнейшего чтения. Надеюсь, поможет.
источник
Ответ в одну строку:
Монитор: контролирует только ОДИН поток, который может одновременно выполняться на мониторе. (необходимо получить блокировку для выполнения одного потока)
Семафор: замок, который защищает общий ресурс. (необходимо получить блокировку для доступа к ресурсу)
источник
Семафор позволяет нескольким потокам (до заданного числа) получать доступ к общему объекту. Мониторы обеспечивают взаимоисключающий доступ к общему объекту.
монитор
семафор
источник
java.util.ArrayList
: это объект или контейнер из нескольких объектов? Ну, это одновременно. Так подходит ли семафор для контроля доступа к нему? Я бы сказал: нет.Когда семафор используется для защиты критической области, нет прямой связи между семафором и защищаемыми данными. Это одна из причин, по которой семафоры могут быть разбросаны по всему коду, и почему легко забыть вызвать wait или уведомить , и в этом случае результатом будет, соответственно, нарушение взаимного исключения или постоянная блокировка ресурса.
Напротив, эти плохие вещи могут случиться с монитором. Монитор устает непосредственно от данных (он инкапсулирует данные), и, поскольку операции монитора являются атомарными действиями, невозможно написать код, который может получить доступ к данным без вызова протокола входа. Протокол выхода вызывается автоматически после завершения операции монитора.
Монитор имеет встроенный механизм для синхронизации условий в виде переменной условия перед продолжением. Если условие не выполняется, процесс должен ждать, пока он не будет уведомлен об изменении условия. Когда процесс ожидает синхронизации условий, реализация монитора заботится о проблеме взаимного исключения и позволяет другому процессу получить доступ к монитору.
Взято из Открытого университета. Часть 3 курса 3 «Взаимодействующий процесс».
источник
Семафор:
Использование счетчика или флага для управления доступом к некоторым общим ресурсам в параллельной системе подразумевает использование семафора .
Пример:
Флаги показывают только текущее состояние Ресурса, отсутствие подсчета или любую другую информацию об ожидающих или запущенных объектах на ресурсе.
Монитор:
Monitor синхронизирует доступ к объекту, связываясь с потоками , заинтересованных в объекте, попросив их доступ приобретает или подождать какое - то условие , чтобы стать правдой.
Пример:
источник