Синхронизация в 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; просмотров: 820;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.