Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Синхронизация процессов и потоков. Блокирующие переменные и семафоры Дийкстры.



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

• Потребность в синхронизации потоков связана с совместным использованием ресурсов вычислительной системы.

• Во многих ОС эти средства называются средствами межпроцессного взаимодействия (IPC), поскольку обычно к ним относятся не только средства межпроцессной синхронизации, но и средства межпроцессного обмена данными.

Параллельные потоки могут работать совершенно независимо друг от друга, а могут быть асинхронными, то есть должны взаимодействовать друг с другом

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

 

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

• Этого можно избежать, если каждому потоку предоставлять монопольное право доступа к области данных

• Когда один поток работает с ней, всем остальным приходится ждать

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

потоков, находящихся в ожидании.

Очень важным понятием синхронизации является понятие «критической секции» программы

Критическая секция – это часть программы, результат выполнения которой может непредсказуемо меняться, если объекты, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этого участка кода еще не закончено

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

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

переменные.

 

Блокирующие переменные - некоторые глобальные переменные, к которым имеют доступ все потоки данного процесса. Каждому набору критических данных ставится в соответствие некоторая двоичная переменная. Поток входит в эти данные переменная=0; выходит=1. Перед входом в критическую секцию поток проверяет значение блокирующей переменной(не входит ли другой поток.): если 1, то можно работать и установится 0. При завершении работы устанавливается 1. Если 0, то критические данные заняты другим потоком.  Особенность: нельзя прерывать поток между операцией проверки и установки значения блокирующей переменной. Существует неделимая команда, если ее нет, то между этими операциями запрещается прерывание. Преимущества: гарантирован доступ к критической секции только одного потока. Недостаток: если ресурс занят, то поток будет все время обращаться к нему - тратить свой квант времени впустую, следовательно, используются вызовы, которые не переводят поток в состояние ожидания. Если ресурс занят, то системный вызов не выполняет циклический поток, а переводит его в процесс ожидания.

 

 Семафоры Дийкстры

 

Вместо блокирующих переменных(0,1) были предложены переменные, которые принимают целые значения. Их используют для синхронизации процессов и потоков - это семафоры. Пусть есть переменная S. Ведем две операции: 1).V- увеличение значения семафора на 1, единое действие, выборка, запоминание, не прерывается. 2).P-приводит к уменьшению переменной на 1, проверка возможно ли это. Если семафор=0(не возможно), то поток ждет, пока уменьшение станет возможным. Если семафор имеет 0 и 1, то он вырождается в блокирующую переменную. Пример: пусть есть 2 потока А и В. каждый из этих потоков осуществляет некоторые операции с буфером памяти. А - пишет в буфер(писатель), В - поток читатель(считывает). N-число буферов. Пусть Е - число пустых, незанятых буферов. В начале E=N. пусть f-число занятых буферов. В начале f=0. Поток-писатель А выполняет действия с семафором Е и пишет информацию в память, пока Е не стала =0, когда Е=0, то писать больше некуда, следовательно, А переходит в ожидание, пока поток В не считает информацию с буферов(одновременно выполняя действия над семафором f).

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 254; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.009 с.)
Главная | Случайная страница | Обратная связь