К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

2. Определение синхронизации

Если рассматривать параллельные процессы абстрактно, то синхронизация процессов — это есть достижение некоторого фиксированного соотношения (порядка) между сигналами, которыми обмениваются эти процессы. В программировании рассматриваются параллельные процессы, которые являются программами, исполняемыми процессором. Поэтому, чтобы избежать технических подробностей, связанных с обменом сигналами между процессами, упростим задачу. То есть будем рассматривать не параллельные процессы, а параллельные потоки. В этом случае обмен сигналами между потоками может происходить только через глобальные переменные. Отсюда следует, что установить некоторый порядок выполнения инструкций потоков можно только посредством проверки этими потоками значений глобальных переменных. Для формализации этого подхода определим условные непрерывные действия путем введения оператора await, который имеет следующий синтаксис:
  await(логическое условие) действие;

Будем считать, что этот оператор работает следующим образом. Он ждет, пока логическое условие не примет значение "истина", и как только это случилось, то выполняется действие. Причем ожидание истинности значения логического условия и выполнение действия происходят непрерывным образом. То есть оператор await является непрерывным.

Теперь можно дать определение синхронизации, которое является более естественным для практики программирования. Под синхронизацией потоков понимается исполнение этими потоками условных непрерывных действий. Рассмотрим частные случаи синхронизации, которые наиболее часто встречаются на практике.

Если оператор await имеет следующий вид:
  await(логическое условие);
то он просто ждет оповещения о выполнении некоторого логического условия. Этот случай называется условной синхронизацией, а само логическое условие также называется событием. В этом случае часто говорят, что оператор await ждет наступления некоторого события.

Если оператор await имеет вид:
  await (TRUE) действие;
то происходит безусловное выполнение непрерывного действия. Этот случай называется взаимным исключением, а программный код, исполняемый внутри непрерывного действия, называется критической секцией.

 

 


Предыдущая        В начало страницы       Следующая
2