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