Инфо IT 24

IT блог, IT мышление

Качество флага

Качество флагаЕсли в качестве флага sem_flg указать константу IPC_NOWAIT, приостановки процесса не произойдет. Если указать в качестве флага константу SEM_UNDO, ядро будет отслеживать изменения семафоров. Если процесс, уменьшивший значение семафоров до нуля или отрицательного числа, будет завершен, сделанные им изменения будут отменены, чтобы не вызвать «вечного» ожидания процессами открытия семафора.

Если изобразить процесс работы с семафором на линии времени, то можно получить картину, изображенную на рис. 10.7. На рисунке изображено несколько линий времени, каждая из которых соответствует изменению состояния процесса или семафора.

Прямоугольники на линиях времени соответствуют периодам активности процесса и периодам положительного значения семафора. Нижняя линия времени отражает операции над семафором; стрелкой, направленной вниз отмечено уменьшение значения семафора; стрелкой, направленной вверх, — увеличение значения. Рядом со стрелкой указан процесс, выполнивший операцию. Буквой «р» обозначен процесс-родитель, буквой «с» — процесс-потомок.

Оба процесса стартуют практически одновременно и сначала инициализируют собственные данные, родитель при этом открывает семафор. После завершения инициализации процесс – родитель закрывает семафор, начиная тем самым критическую секцию.

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

Статью опубликовал: i24TbloG

Метки:

Из каталога:

Программирование Linux Part B

Предыдущая статья:

Следующая статья: