Разница между мьютексом и семафором (с таблицей)

Оглавление:

Anonim

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

Мьютекс против семафора

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

Mutex означает объект взаимного исключения. Это тип двоичного семафора, который используется для ограничения доступа к общему ресурсу. Чтобы предотвратить проблемы с длительной инверсией приоритета, он имеет механизм наследования приоритетов. Это позволяет блокировать существующие задания с более высоким приоритетом на минимально возможное время. С другой стороны, наследование приоритета не исправляет инверсию приоритета; скорее, это снижает его влияние.

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

Таблица сравнения мьютексов и семафоров

Параметры сравнения

Мьютекс

Семафор

Механизм

Это система блокировки. Это своего рода сигнальная система.
Цель

Тема представлена ​​мьютексом. Процессы представлены семафором.
Природа

Мьютекс обычно атомарный и единичный. Семафор является атомарным по своей природе, но не единичным.
Тип данных

Mutex - это не что иное, как часть программного обеспечения. Семафор - это переменная с целочисленным значением.
Типы

Мьютекс не имеет подтипов. Счетные и двоичные семафоры - это два типа семафоров.
Модификация

Только процесс, который может запросить или освободить ресурс, может его изменить. Семафор можно изменить с помощью функций ожидания и сигнала.

Что такое мьютекс?

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

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

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

Мьютекс допускает взаимное исключение; либо производитель, либо потребитель могут иметь ключ (мьютекс) и продолжать работу. Потребитель должен ждать, пока буфер производителя заполнится, и наоборот.

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

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

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

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

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

Вывод

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

использованная литература

Разница между мьютексом и семафором (с таблицей)