Рекомендуем, 2020

Выбор редакции

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

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

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

Сравнительная таблица

Основа для сравнениясемафорMutex
основнойСемафор - это сигнальный механизм.Mutex - это механизм блокировки.
существованиеСемафор является целочисленной переменной.Мутекс это объект.
функцияСемафор позволяет нескольким программным потокам получать доступ к конечному экземпляру ресурсов.Mutex позволяет нескольким программным потокам обращаться к одному ресурсу, но не одновременно.
ВладениеЗначение семафора может быть изменено любым процессом, получающим или освобождающим ресурс.Блокировка объекта Mutex снимается только процессом, который получил блокировку для него.
классифицироватьСемафор можно разделить на счетный семафор и двоичный семафор.Mutex не классифицируется дальше.
операцияЗначение семафора изменяется с помощью операций wait () и signal ().Объект мьютекса блокируется или разблокируется процессом, запрашивающим или освобождающим ресурс.
Занятые ресурсыЕсли все ресурсы используются, процесс, запрашивающий ресурс, выполняет операцию wait () и блокируется, пока счетчик семафоров не станет больше единицы.Если объект мьютекса уже заблокирован, процесс, запрашивающий ресурсы, ожидает и ставится системой в очередь до снятия блокировки.

Определение семафора

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

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

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

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

Определение мьютекса

Объект взаимного исключения вскоре называется Mutex. Из термина взаимное исключение мы можем понять, что только один процесс одновременно может получить доступ к данному ресурсу. Объект мьютекса позволяет нескольким программным потокам использовать один и тот же ресурс, но по одному не одновременно.

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

Между тем, процесс получил блокировку объекта мьютекса, никакой другой поток / процесс не может получить доступ к этому ресурсу. Если объект мьютекса уже заблокирован, процесс, желающий получить блокировку объекта мьютекса, должен ждать и ставиться в очередь системой, пока объект мьютекса не будет разблокирован.

Ключевые различия между семафором и мьютексом

  1. Семафор - это механизм сигнализации, так как операции wait () и signal (), выполняемые с переменной семафора, указывают, получает ли процесс ресурс или освобождает ресурс. С другой стороны, мьютекс является механизмом блокировки, так как для получения ресурса процессу необходимо заблокировать объект мьютекса, а при освобождении процесса ресурса необходимо разблокировать объект мьютекса.
  2. Семафор обычно является целочисленной переменной, тогда как мьютекс является объектом .
  3. Семафор позволяет нескольким программным потокам получать доступ к конечному экземпляру ресурсов . С другой стороны, Mutex позволяет нескольким программным потокам получать доступ к одному общему ресурсу, но по одному.
  4. Значение переменной семафора может быть изменено любым процессом, который получает или освобождает ресурс, выполняя операции wait () и signal (). С другой стороны, блокировка, полученная для объекта мьютекса, может быть снята только процессом, который получил блокировку для объекта мьютекса.
  5. Семафоры делятся на два типа: семафор и двоичный семафор, который очень похож на мьютекс.
  6. Значение переменной семафора изменяется операциями wait () и signal () отдельно от инициализации. Тем не менее, объект отключения блокируется или разблокируется процессом, получающим или освобождающим ресурс.
  7. Если все ресурсы получены процессом, и ни один ресурс не является свободным, то процесс, желающий получить ресурс, выполняет операцию wait () для переменной семафора и блокирует себя до тех пор, пока число семафоров не станет больше 0. Но если объект мьютекса уже заблокированный, тогда процесс, желающий получить ресурс, ожидает и получает систему в очередь, пока ресурс не будет освобожден и объект мьютекса не будет разблокирован.

Заключение:

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

Top