Что такое семафор?
Семафор — это просто переменная, которая неотрицательна и разделена между потоками. Семафор — это механизм сигнализации, и поток, ожидающий семафора, может быть сигнализирован другим потоком. Он использует две атомарные операции: 1) ожидание и 2) сигнал для синхронизации процесса.
Семафор разрешает или запрещает доступ к ресурсу, который зависит от того, как он настроен.
В этом уроке вы узнаете:
- Что такое Mutex?
- Использование семафора
- Использование Mutex
- Разница между семафором и мьютексом
- Распространенные заблуждения о мьютексе и семафоре
- Преимущества семафора
- Преимущества Mutex
- Недостаток семафоров
- Недостатки Mutex
Что такое 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 блокируются или разблокируются.