@MaxLich
java developer

Чем отличается семафор, мьютекс и монитор? Или это одно и тоже?

В разных источниках нахожу разные определения этим терминам. Где-то было написано, что мьютекс - это по сути некий объект, связанный с каждым объектом в Джаве, и который имеет два состояния: занят и свободен. А про монитор в той же статье было сказано, что специальный механизм (блок кода), который отвечает за управления доступ к некоторому ресурсу (объекту). Мол, монитор обеспечивает доступ к ресурсу только одной нити. И всем остальным нитям приходится ждать освобождения этого ресурса. То есть этот механизм отвечает за захват нитью ресурса, работой с ним в монопольном режиме, а также за последующее освобождение нитью этого ресурса. В каких-то статьях написано, что всё наоборот (монитор - это объект, связанный с другим объектом и имеющий состояние "занят" или "свободен", а мьютекс - как раз механизм, управляющий доступом к ресурсу). У Эккеля (в переводе), например, вот что написано:
Для решения проблемы соперничества потоков фактически все многопоточные схемы синхронизируют доступ к разделяемым ресурсам. Это означает, что доступ к разделяемому ресурсу в один момент времени может получить только один поток. Чаще всего это выполняется помещением фрагмента кода в секцию блокировки так, что одновременно пройти по этому фрагменту кода может только один поток. Поскольку такое предложение блокировки дает эффект взаимного исключения, этот механизм часто называют мьютексом (MUTual Exclusion).

В Java есть встроенная поддержка для предотвращения конфликтов в виде ключевого слова synchronized. Когда поток желает выполнить фрагмент кода, охраняемый словом synchronized, он проверяет, доступен ли семафор, получает доступ к семафору, выполняет код и освобождает семафор.
  • Вопрос задан
  • 16806 просмотров
Пригласить эксперта
Ответы на вопрос 2
programmerjava
@programmerjava
Ну вот же в википедии написано во втором абзаце, что мьютекс - разновидность семафора.
https://ru.wikipedia.org/wiki/%D0%9C%D1%8C%D1%8E%D...
Ответ написан
@MaxLich Автор вопроса
java developer
А в Джаве в виде чего это всё реализовано? Как я понял, для семафора есть отдельный класс. А мьютекс и монитор в виде чего там реализовано? как это там выглядит?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы