logo search
ЯП / ЯП / ЯП экзамен

Семафоры в параллельном программировании. Типы семафоров.

Семафор – механизм синхронизации. Семафорный механизм работает по схеме, в которой сначала исследуется состояние критического ресурса, а затем осуществляется доступ к критическому ресурсу. В состав механизма включаются средства формирования и обслуживание очереди ожидающих процессов. Семафор представляет собой неотрицательную целую переменную, над которой возможно две операции: P, V.

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

V – увеличение семафора на 1. Если при этом имеются процессы, задерживаемые на управлении P операции на данном семафоре, один из этих процессов выходит из состояния ожидания и может выполнить свою P операцию. Операции P и V выполняются операционной системой, в ответ на запрос, выданный некоторым процессом и содержащий имя семафора в качестве параметра.

Семафор:

  1. Значение семафора

  2. Идентификатор процесса

  3. Число процессов ожидающих увеличения значения семафора

  4. Число процессов ожидающих нулевого значения семафора

Основное достоинство – отсутствие состояния активного ожидания.

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

Мьютекс - используется для реализации взаимного исключения в критическом разделе кода. Может быть или занят или свободен. Если он свободен, то действие ожидания мьютекса не блокируется. Если занят, то блокировано.

Блокировки для обеспечения чтения и записи.

Используется для реализации чтения и записи среди потоков.

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

Блокировкой для чтения может владеть любое количество потоков. Но записывать и модифицировать только один поток.