Разница между семафором и монитором

Разница между семафором и монитором
Разница между семафором и монитором

Видео: Разница между семафором и монитором

Видео: Разница между семафором и монитором
Видео: Операционные системы, урок 5: Взаимное исключение. Семафоры. Проблема чтения/записи. 2024, Май
Anonim

Семафор против монитора

Семафор - это структура данных, которая используется, чтобы гарантировать, что несколько процессов не обращаются к общему ресурсу или критическому разделу одновременно в средах параллельного программирования. Семафоры используются, чтобы избежать мертвых блокировок и состояний гонки. Монитор - это конструкция языка программирования, которая также используется для предотвращения одновременного доступа нескольких процессов к общему ресурсу, поэтому гарантирует взаимное исключение. Для решения этой задачи мониторы используют условные переменные.

Что такое семафор?

Семафор - это структура данных, которая используется для взаимного исключения критических секций. Семафоры в основном поддерживают две операции, называемые ожиданием (исторически известным как P) и сигналом (исторически известным как V). Операция ожидания блокирует процесс до тех пор, пока семафор не будет открыт, а операция сигнала не позволит войти другому процессу (потоку). Каждый семафор связан с очередью ожидающих процессов. Когда операция ожидания вызывается потоком, если семафор открыт, поток может продолжаться. Если семафор закрывается, когда операция ожидания вызывается потоком, поток блокируется, и он должен ждать в очереди. Операция с сигналом открывает семафор, и если в очереди уже есть поток, этому процессу разрешается продолжить, и если в очереди нет потоков, ожидающих, сигнал запоминается для следующих потоков. Существует два типа семафоров, называемых мьютексными семафорами и счетными семафорами. Семафоры мьютексов обеспечивают единый доступ к ресурсу, а подсчет семафоров позволяет нескольким потокам обращаться к ресурсу (у которого есть несколько доступных единиц).

Что такое монитор?

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

В чем разница между семафором и монитором?

Хотя и семафоры, и мониторы используются для достижения взаимного исключения в средах параллельного программирования, они различаются методами, используемыми для решения этой задачи. В мониторах код, который используется для достижения взаимного исключения, находится в одном месте и более структурирован, в то время как код для семафоров распределяется как вызовы функций ожидания и сигнала. Кроме того, очень легко сделать ошибки при реализации семафоров, в то время как вероятность ошибки при реализации мониторов очень мала. Кроме того, мониторы используют условные переменные, а семафоры - нет.

Рекомендуем: