В настоящее время я посещаю курс параллельного программирования в моем университете, и недавно мы начали говорить о концепции монитора. Хотя я понимаю необходимость взаимного исключения, я не понимаю, почему я бы использовал для этого монитор.
Насколько я понимаю, монитор гарантирует, что в критическом разделе всегда находится ровно один процесс или нет. Мы можем добиться именно этого с помощью семафора. Кроме того, мы реализуем мониторы (или хотя бы одну возможность их реализации) с семафорами.
Так зачем мне реализовывать то, что делает то же самое, что семафор с семафором? Какие преимущества я получу?
источник
Мы наконец обсудили, почему вы бы использовали монитор вместо семафора в лекции сегодня.
Это в основном сводится к следующему: монитор и семафор одинаково выразительны, что означает, что вы можете найти решение проблемы с монитором, где первоначально использовался семафор, и наоборот.
Ну, мы уже знали это, так почему бы вам использовать монитор вместо семафора?
Личное предпочтение. Обычно настольное приложение использует мониторы, оставляя меньше возможностей для ошибок, но, как компромисс, имеет релятивно раздутую структуру. Семафоры, с другой стороны, часто используются в операционных системах, поскольку они представляют собой облегченную структуру, но оставляют больше возможностей для ошибок.
Я думаю, мы можем сделать вывод, что это ситуативное решение, независимо от того, нужен ли вам / хотите использовать монитор или семафор. Если вы строите систему реального времени, вы можете использовать семафор, если вы создаете офисную программу, вы можете использовать и монитор.
источник
Взгляните, например, на "Маленькую книгу семафоров"Аллен Б. Дауни. это заявляет и решает много проблем синхронизации. Посмотрите, в частности, испорченные решения, и вы увидите, что семафоры представляют собой очень низкоуровневый механизм, очень мощный, но чрезвычайно простой в неправильном использовании, где простые ошибки имеют ужасные последствия (еще более усугубляемые недетерминированной работой параллельных программ). Например, легко забыть о принудительном взаимном исключении, работе с неправильным семафором и т. Д. Мониторы предлагают готовые решения для наиболее часто используемых случаев и несут с собой большинство преимуществ объектно-ориентированного программирования (т. Е. Вы знаете, что единственный способ связываться с переменными, управляемыми монитором, - это его операции). Недостатком является то, что они не могут быть легко переоборудованы в не объектно-ориентированные языки,
источник