Синхронизация в QNX
Синхронизация параллельных процессов.
Параллельная обработка
Параллельными называются процессы, которые существуют одновременно. Параллельные процессы могут быть независимыми друг от друга или асинхронными. Асинхронным параллельным процессам требуется периодически синхронизироваться и взаимодействовать друг с другом.
Если определенные операции логически можно выполнять параллельно, то для указания параллелизма воспользуемся парой операторов parbegin/parend, которые будут, соответственно, определять начало и конец параллельного выполнения. Конструкция для указания параллелизма будет выглядеть следующим образом:
Parbegin
оператор_1;
оператор_2;
…
оператор_n
Parend
Если в определенный момент времени в системе существует более одного потока, то говорят, что потоки параллельны.
Взаимоисключения (mutual exclusion) – когда каждый поток, обращающийся к разделяемым данным (данные используемые в один и тот же момент времени), исключает для всех других потоков возможность одновременного с ним обращения к этим данным.
Проблемы критических участков. Взаимоисключения
Кретический ресурс - ресурс, который допускает обслуживание только одного пользователя за один раз. Если несколько процессов хотят пользоваться критическим ресурсом в режиме разделения времени, им следует синхронизировать свои действия таким образом, чтобы этот ресурс всегда находился в распоряжении не более чем одного их них.
Для каждого процесса могут быть выделены участки, в которых происходит обращение к критическим ресурсам, они называются критическими участками.
Пример:
Пусть два процесса X и Y разделяют переменную счет. Если оба процесса попытаются увеличить счет на 1 одновременно, то окончательное значение этой переменной может оказаться неверным. Рассмотрим следующую последовательность событий:
· процесс X запоминает значение переменной счет в некоторой локальной переменной счет_Х;
· процесс Y запоминает значение переменной счет в некоторой локальной переменной счет_Y;
· процесс Х увеличивает значение счет_Х на 1 и записывает его в счет;
· процесс Y увеличивает значение счет_Y на 1 и записывает его в счет.
Заметим, что хотя каждый процесс увеличил значение счет на 1, ее окончательное значение увеличилось только на 1, а не на 2. Чтобы избежать таких нежелательных явлений, увеличение разделяемой переменной счет следует рассматривать как критический участок.
Синхронизация в QNX
Отрывок программного кода, который должен выполняться "последовательно" (serially), т. е. не более чем одним потоком одновременно, называется "критической секцией программного кода" (critical section).
Дата добавления: 2017-01-29; просмотров: 813;