Редактирование: Операционные системы/Взаимодействие процессов. Классические задачи синхронизации процессов
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 92: | Строка 92: | ||
void reader (void) | void reader (void) | ||
{ | { | ||
- | + | while (TRUE) /* бесконечный цикл */ | |
- | + | { | |
- | + | down(&mutex); /* получить эксклюзивный доступ к «rc»*/ | |
- | + | rc = rc + 1; /* еще одним читателем больше */ | |
- | + | if (rc == 1) down(&db); /* если это первый читатель, нужно заблокировать эксклюзивный доступ к базе */ | |
- | + | up(&mutex); /*освободить ресурс rc */ | |
- | + | read_data_base(); /* доступ к данным */ | |
- | + | down(&mutex); /*получить эксклюзивный доступ к «rc»*/ | |
- | + | rc = rc - 1: /* теперь одним читателем меньше */ | |
- | + | if (rc == 0) up(&db); /*если это был последний читатель, разблокировать эксклюзивный доступ к базе данных */ | |
- | + | up(&mutex); /*освободить разделяемый ресурс rc */ | |
- | + | use_data_read(); /* некритическая секция */ | |
- | + | } | |
} | } | ||