2016-07-02 7 views
12

Я прочитал, что мьютекс - это семафор со значением 1 (двоичный семафор), который используется для обеспечения взаимного исключения.Монитор против Mutex

Я прочел эту ссылку Semaphore vs. Monitors - what's the difference? , в которой говорится, что монитор помогает в достижении взаимного исключения.

Может кто-нибудь сказать мне разницу между мьютекса и монитором, так как на самом деле делают то же самое

ответ

8

Поскольку вы не указали, какую операционную систему или язык/библиотеки вы говорите, позвольте мне ответить в общем виде ,

Концептуально они одинаковы. Но, как правило, они слегка реализованы по-разному

монитор

Как правило, реализация мониторов быстрее/легкий вес, так как он предназначен для многопоточной синхронизации в пределах того же процесса. Также, как правило, он предоставляется самой каркасной/библиотекой (в отличие от запроса ОС).

мьютекса

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

+1

кажется, тихо обратное (производительность мудрая): http://japgolly.blogspot.bg/2012/04/ruby-mutex-reentrancy.html – akostadinov

+0

@akostadinov Я не знаю рубина, чтобы прокомментировать это. Даже не уверен, что код, используемый для этого теста, является надежным. Может быть, Ruby является нарушением общего заявления, которое я делаю?У Джозефа Альбахари есть [Сравнение блокирующих конструкций в C#] (http://www.albahari.com/threading/part2.aspx#_Locking), который, кажется, лучше подходит моим заявкам – Vikhram

+0

Не заметил, что этот вопрос не является рубиновым , Странно, но я не удивлен такой странностью. Я имею в виду о различии поведения рубина во всем остальном. – akostadinov

5

Монитор отличается от Mutex, но их можно считать похожими в том смысле, что монитор построен поверх Mutex. Для ясности см. Изображение монитора на изображении внизу.

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

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

enter image description here

Я вы хотите, вы можете увидеть мой ответ here, которые могут или не могут иметь отношение к этому вопросу.

Вы можете найти другую соответствующую дискуссию здесь

Semaphore vs. Monitors - what's the difference?