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