предотвращение условий гонки с использованием строгих изменений - PullRequest
3 голосов
/ 25 февраля 2011

Я нашел следующий код в книге об операционных системах.Это метод, называемый «строгое изменение», который должен предотвращать состояние гонки между процессами, используя блокировку, когда процесс входит в критическую область.Я понимаю условия гонки, но не совсем понимаю этот код.

// process 0
while(TRUE) {
   while(turn != 0)   /* loop */
   critical_region();
   turn = 1;
   noncritical_region();
}

Существует также этот код, который прямо рядом с ним.опечатка в этом коде для второго цикла while.Если нет, то может кто-нибудь объяснить, как работает этот код?Объяснение в книге не имело смысла для меня.Это имеет смысл только на очень общем абстрактном уровне.Однако когда я смотрю на этот код, я просто не понимаю.

1 Ответ

1 голос
/ 25 февраля 2011

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

Это останавливается, когда один из процессов завершается.Он получит ход живым процессом, но никогда не вернет ход, потому что он больше не работает.Живой процесс не будет делать никакой полезной работы.

...