Что такое Семафор? Подсчет, двоичные типы с примером

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

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

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

Характеристика семафора

Вот характеристики семафора:

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

Типы семафоров

Два распространенных типа семафоров:

  • Подсчет семафоров
  • Бинарные семафоры.

Подсчет семафоров

Этот тип семафора использует счетчик, который помогает задаче получать или освобождать множество раз. Если начальный счетчик = 0, счетный семафор должен быть создан в недоступном состоянии.

Подсчет семафоров
Подсчет семафоров

Однако если счетчик > 0, семафор создается в доступном состоянии, и количество имеющихся у него токенов равно его счетчику.

Двоичные семафоры

Бинарные семафоры очень похожи на счетные семафоры, но их значения ограничены 0 и 1. В семафорах этого типа время ожидания operaция работает только если семафор = 1, а сигнал operaОперация успешна, когда семафор = 0. Это проще реализовать, чем подсчет семафоров.

Двоичные семафоры

Двоичные семафоры

Пример семафора

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

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Подождите и подайте сигнал Operaции в семафорах

Оба эти operaиспользуются для реализации процесс syncхронизация. Цель этого семафора operaЦелью является получение взаимного исключения.

Ждать Operaпроизводство

Этот тип семафора operaпозволяет контролировать попадание задачи в критическую секцию. Однако если значение ожидания положительное, значение аргумента ожидания X уменьшается. В случае отрицательного или нулевого значения нет operaция выполняется. Его еще называют P(S) operaния.

После уменьшения значения семафора, которое становится отрицательным, команда удерживается до тех пор, пока не будут выполнены необходимые условия.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

сигнал operaпроизводство

Этот тип семафора operaиспользуется для контроля выхода задачи из критической секции. Это помогает увеличить значение аргумента на 1, что обозначается как V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Счетный семафор против двоичного семафора

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

Подсчет семафоров Двоичный семафор
Нет взаимного исключения Взаимное исключение
Любое целочисленное значение Значение только 0 и 1
Более одного слота Только один слот
Предоставьте набор процессов Имеет механизм взаимного исключения.

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

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

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

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

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

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

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

  • Одним из самых больших ограничений семафора является инверсия приоритета.
  • Команда operaСистема ting должна отслеживать все вызовы ожидания и сигнализировать семафор.
  • Их использование никогда не является обязательным, но только по соглашению.
  • Во избежание деadlocks в семафоре, Ожидание и Сигнал operaДействия должны выполняться в правильном порядке.
  • Программирование семафоров является сложным, поэтому есть вероятность не добиться взаимного исключения.
  • Это также непрактичный метод для крупномасштабного использования, поскольку их использование приводит к потере модульности.
  • Семафор более подвержен ошибкам программиста.
  • Это может вызвать deadlock или нарушение взаимного исключения из-за ошибки программиста.

Итого

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