Монитор против семафора

Опубликовано: 19 Декабря, 2021

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

Монитор:
Конструкция синхронизации высокого уровня типа Monitor. Это абстрактный тип данных. Тип Monitor содержит общие переменные и набор процедур, которые работают с общей переменной.

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

Синтаксис:

 monitor {
    
    // объявления общих переменных
    переменные данных;
    Процедура P1 () {...}
    Процедура P2 () {...}
    .
    .
    .
    Процедура Pn () {...}

}

Семафор:
Семафор - это объект нижнего уровня. Семафор - это неотрицательная целочисленная переменная. Значение Semaphore указывает количество общих ресурсов, доступных в системе. Значение семафора может быть изменено только двумя функциями, а именно операциями wait () и signal () (помимо инициализации).

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

Семафор делится на 2 категории:

  1. Двоичный семафор
  2. Подсчет семафоров

Синтаксис:

 // Ожидание операции
    wait (Semaphore S) {   
        в то время как (S <= 0);
            S--;
    }
    // Сигнальная операция
    signal (Semaphore S) {
        S ++;
    }

Преимущества мониторов:

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

Преимущества семафоров:

  • Семафоры не зависят от машины (потому что они реализованы в службах ядра).
  • В отличие от мониторов, семафоры позволяют более чем одному потоку получить доступ к критическому разделу.
  • В семафорах нет вращения, следовательно, нет потери ресурсов из-за отсутствия ожидания.

РЕКОМЕНДУЕМЫЕ СТАТЬИ