Блокирующие переменные

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

Для каждого набора критических данных заводится своя двоичная переменная, которая устанавливается в 0, когда поток входит в КС, и в 1 – когда он ее покидает.

Блокирующие переменные могут быть использованы при работе с любыми разделяемыми ресурсами.

Но нельзя прерывать поток между выполнением проверки состояния переменной и установки ее значения. Для этого можно:

- использовать встроенную в процессор единую команду анализа и присвоения значения логической переменной

- а если такой нет, специальными системными примитивами запрещать в это время все прерывания.

Недостаток такой системы:

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

В ОС Windows NT взаимное исключение реализовано похожим образом, но от этого недостатка избавились: при переводе второго жаждущего потока в ожидание делается отметка, что его нужно освободить после освобождения критической секции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: