нарушение взаимного исключения с неатомным ожиданием (ями) - Семафоры - PullRequest
1 голос
/ 24 августа 2011

Я занимаюсь темой «Операционные системы» и не могу разобраться в этом:

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

Теперь я вижу, как это может привести к неправильному подсчету, в результате чего программа думает, что у нее больше ресурсов, чем есть на самом деле,

Но я не могу этого сделатьпонять, как это нарушит взаимное исключение: (

Может кто-нибудь пролить свет или направить меня в правильном направлении?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2014

Предположим, что ниже приведен код для ожидания (S) (пример galvin)

 wait(S) {
         while (S <= 0 )
         ; // busy wait
         S--;
}

Если операция ожидания (S) не является атомарной, то есть все операции внутри ожидания (S) не являютсявыполняется одновременно. Два потока T1 и T2 выполняют одну и ту же операцию wait (S) одновременно, поскольку операция wait (S) не является атомарной, а T1 обновляет значение S и одновременно обновляет T2 (перезаписывает значение, записанноеT1) фактическое уменьшение значения S равно 2, но одновременное выполнение приводит к уменьшению только 1. Этот сценарий известен как состояние гонки, и это приводит к неправильному счету, в результате чего программа считает, что у нее больше ресурсов, чем есть на самом деле.Вы можете прочитать больше о состоянии гонки здесь http://en.wikipedia.org/wiki/Race_condition

0 голосов
/ 01 сентября 2011

Результат номер два в Google (этот вопрос был номером один): http://web.cs.wpi.edu/~cs502/f98/Waltham/hw2soln.html

См. Вопрос 2.

...