Мьютекс против семафора: в чем разница?

Содержание:

Anonim

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

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

Семафор разрешает или запрещает доступ к ресурсу в зависимости от того, как он настроен.

В этом руководстве вы узнаете:

  • Что такое мьютекс?
  • Использование семафора
  • Использование мьютекса
  • Разница между семафором и мьютексом
  • Распространенные заблуждения о мьютексах и семафорах
  • Преимущества семафора
  • Преимущества Mutex
  • Недостаток семафоров
  • Недостатки Mutex

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

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

КЛЮЧЕВАЯ РАЗНИЦА

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

Использование семафора

В случае одного буфера мы можем разделить буфер размером 4 КБ на четыре буфера по 1 КБ. Семафор может быть связан с этими четырьмя буферами. Это позволяет пользователям и производителям работать с разными буферами одновременно.

Использование мьютекса

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

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

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

Общие факты о мьютексах и семафорах

Вот несколько общих фактов о мьютексах и семафорах:

  • Только одна задача может получить мьютекс. Таким образом, с мьютексом связано владение, и только владелец может освободить мьютекс.
  • Причины использования мьютекса и семафора различны, возможно, из-за сходства в их реализации мьютекс будет называться двоичным семафором.
  • Одно широко известное заблуждение состоит в том, что мьютексы и семафоры почти одинаковы, с той лишь разницей, что мьютекс может считать до 1, а семафоры могут считать от 0 до N.
  • Всегда существует неопределенность между двоичным семафором и мьютексом. Вы можете услышать, что мьютекс - это двоичный семафор, что неверно.

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

Вот плюсы / преимущества использования семафора:

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

Преимущества Mutex

Вот важные плюсы / преимущества Mutex

  • Мьютексы - это простые блокировки, полученные перед входом в критическую секцию и последующим ее снятием.
  • Поскольку в любой момент времени в критической секции находится только один поток, состояния гонки отсутствуют, и данные всегда остаются согласованными.

Недостаток семафоров

Вот минусы / недостатки семафора

  • Одно из самых больших ограничений семафора - инверсия приоритета.
  • Операционная система должна отслеживать все вызовы ожидания и сигнального семафора.
  • Их использование никогда не принудительно, но только по соглашению.
  • Чтобы избежать взаимоблокировок в семафоре, операции Wait и Signal должны выполняться в правильном порядке.
  • Семафорное программирование - сложный метод, поэтому существует вероятность не достичь взаимного исключения.
  • Это также непрактичный метод для крупномасштабного использования, поскольку их использование приводит к потере модульности.
  • Семафор более подвержен ошибкам программиста.
  • Это может вызвать тупик или нарушение взаимного исключения из-за ошибки программиста.

Недостатки Mutex

Вот минусы / недостатки Mutex

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