Автор RedOrange задал вопрос в разделе ВУЗы, Колледжи
Что такое алгоритм Деккера? и получил лучший ответ
Ответ от Алла[гуру]
Алгоритм ДеккераВ алгоритме Деккера предлагается решение проблемы взаимоисключения. int ProcessNum=1; // номер процесса для доступа к ресурсу int ResourceProc1 = 0; // = 1 – ресурс занят процессом 1 int ResourceProc2 = 0; // = 1 – ресурс занят процессом 2 Process_1() { while (1) { ResourceProc1 = 1; // процесс 1 пытается занять ресурс /* цикл ожидания доступа к ресурсу */ while ( ResourceProc2 == 1 ) { if ( ProcessNum == 2 ) { ResourceProc1 = 0; // повторять, пока ресурс занят процессом 2 while ( ProcessNum == 2 ); ResourceProc1 = 1; } } < Использование общего ресурса > ProcessNum = 2; ResourceProc1 = 0; } } Process_2() { while (1) { ResourceProc2 = 1; // процесс 2 пытается занять ресурс /* цикл ожидания доступа к ресурсу */ while ( ResourceProc1 == 1 ) { if ( ProcessNum == 1 ) { ResourceProc2 = 0; // повторять, пока ресурс используется процессом 1 while ( ProcessNum == 1 ); ResourceProc2 = 1; } } < Использование общего ресурса > ProcessNum = 1; ResourceProc2 = 0; } }Алгоритм Деккера гарантирует корректное решение проблемы взаимоисключения для двух процессов. Управляющие переменные ResourceProc1, ResourceProc1 обеспечивают взаимоисключение, переменная ProcessNum исключает возможность бесконечного откладывания. Если оба процесса пытаются получить доступ к ресурсу, то процесс, номер которого указан в ProcessNum, продолжает проверку возможности доступа к ресурсу (внешний цикл ожидания ресурса) . Другой же процесс в этом случае снимает свой запрос на ресурс, ожидает своей очереди доступа к ресурсу (внутренний цикл ожидания) и возобновляет свой запрос на ресурс.Алгоритм Деккера может быть обобщен на случай произвольного количества процессов (см. [16]), однако, такое обобщение приводит к заметному усложнению выполняемых действий. Кроме того, программное решение проблемы взаимоисключения процессов приводит к нерациональному использованию процессорного времени ЭВМ (процессу, ожидающему освобождения ресурса, постоянно требуется процессор для проверки возможности продолжения – активное ожидание (busy wait)).