Что такое семафор?
Семафор - это просто неотрицательная переменная, совместно используемая потоками. Семафор - это механизм сигнализации, и поток, ожидающий семафор, может быть сигнализирован другим потоком. Он использует две атомарные операции: 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
- Если поток получает блокировку и переходит в спящий режим или вытесняется, то другой поток может не продвинуться вперед. Это может привести к голодной смерти.
- Его нельзя заблокировать или разблокировать из контекста, отличного от того, в котором он был получен.
- Только один поток должен быть разрешен в критическом разделе одновременно.
- Обычная реализация может привести к состоянию ожидания занятости, которое тратит время процессора.