Является ли семафор потокобезопасным, если он допускает переменную больше 1?

Недавно я изучал сон парикмахера и понял, что это похоже на бинарный семафор, когда значение разрешения равно 1. А как насчет того, когда оно превышает 1? Будет ли один поток заменен новым без освобождения, когда будет получено несколько потоков?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Но если число семафоров равно 2, два потока могут одновременно обращаться к одному и тому же ресурсу. Если ваш ресурс (какой-то объект) является потокобезопасным, все в порядке. В противном случае вам нужно будет реализовать какой-то механизм синхронизации, чтобы небезопасная часть могла быть доступна только одному потоку за раз.

Другие вопросы по теме