Я работаю над домашней проблемой из операционных систем Stalling: внутренними и проектными принципами. Таким образом, я не прошу ответа, но любая помощь в понимании этого была бы полезна, так как мне тяжело обволакивать голову вокруг этого. Есть два процесса, исполняющие:Состояние операционной системы Состояние гонки
Оба процесса выполнения следующий код:
shared int x;
x = 10;
while (1)
{
x = x - 1;
x = x + 1;
if (x != 10)
printf(“x is %d”,x)
}
Первая часть этого вопроса спросил, как «х 10» может быть напечатано, что у меня не было никаких проблем отслеживания логики для.
Однако вторая часть спрашивает, как напечатать «x is 8». Кроме того, он дает подсказку:
«Вы должны помнить, что приращение/декремент на уровне исходного языка не выполняется атомарно, то есть, код на языке ассемблера:»
LD r0,X
INCR r0
STO r0,X
«реализует единственный C инструкция x = x + 1 "
Несмотря на подсказку, мне не удается увидеть, как процесс может когда-либо достигнуть секции printf без увеличения значения до девяти. Что мне не хватает?
Он специально попросил не дать ответ. –
А, конечно, я знал, что у меня что-то не хватает мысленно, и это было то, что Load x справа. Сейчас имеет смысл, спасибо за разъяснение, я скоро примусь, ожидая, когда истечет срок, чтобы принять участие. –
@HunterMcMillen - Не совсем. Он сказал, что он «не просит ответа» - он никогда не просил не давать ответа. – Steve