Учебники

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

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

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

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

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

Что такое Mutex?

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

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

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

Использование Mutex

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

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

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

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

Вот несколько распространенных фактов о Mutex и семафоре:

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

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

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

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

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

Здесь, важные плюсы / преимущества Mutex

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

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

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

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

Недостатки Mutex

Вот минусы / минусы Mutex

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

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

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