Флаги готовности
shared int ready[2] = {0, 0};
Когда i-й процесс готов войти в критическую секцию, он присваивает элементу массива ready [i] значение равное 1.
После выхода из критической секции он, естественно, сбрасывает это значение в 0. Процесс не входит в критическую секцию, если другой процесс уже готов к входу в критическую секцию или находится в ней:while (some condition) { ready[i] = 1; while(ready[1-i]);
critical section ready[i] = 0;
remainder section
Полученный алгоритм обеспечивает взаимоисключение, позволяет процессу, готовому к входу в критический участок, войти в него сразу после завершения эпилога в другом процессе, но все равно нарушает условие прогресса. Пусть процессы практически одновременно подошли к выполнению пролога. После выполнения присваивания ready [0]=1 планировщик передал процессор от процесса 0 процессу 1, который также выполнил присваивание ready [ 1 ] =1. После этого оба процесса бесконечно долго ждут друг друга на входе в критическую секцию. Возникает ситуация, которую принято называть тупиковой (deadlock). (Подробнее о тупиковых ситуациях рассказывается в лекции 7.)
Еще по теме Флаги готовности:
- ГОТОВНОСТЬ К ДЕЙСТВИЮ
- ОБУЧЕНИЕ ШКОЛЬНОЕ: ГОТОВНОСТЬ ПСИХОЛОГИЧЕСКАЯ
- 11.2. Боевая готовность и бдительность сотрудника
- Тест «ГОТОВНОСТЬ К РИСКУ»
- Бдительность, боевая готовность и психология.
- Подготовленность и боевая готовность.
- 11.2. Боевая готовность и бдительностьсотрудника
- ГОТОВНОСТЬ К РАЗРЫВУ С ОКРУЖЕНИЕМ
- ГОТОВНОСТЬ К СОЦИАЛЬНОМУ НЕУСПЕХУ
- МУДРОСТЬ НАЧИНАЕТСЯ С ГОТОВНОСТИ К ПОТЕРЯМ
- Упражнение для выявления вашей готовности быть целителем
- Вопросы для самоконтроля
- ДИСПОЗИЦИЯ
- Авторского права объекты: •
- ТЕСТ КЕРНА - ЙЕРАСЕКА
- ФЕМИНИННОСТЬ
- ПРИТЯЗАНИЕ ДЕТСКОЕ