Как я чередую эти процессы?
Я только начинаю изучать чередование, и у меня есть программа с двумя следующими процессами:
Процесс № 1:
shared int x;
x = 7;
while true {
x = x - 1;
x = x + 1;
if (x != 7)
printf("x is %d", x);
Процесс № 2:
shared int x:
x = 7;
while true {
x = x - 1;
x = x + 1;
if (x != 7)
printf("x is %d", x);
Если не было ограничений на порядок чередования, как я могу упорядочить или чередовать эти два процесса так, чтобы печаталось "x is 7"?
1 ответ
Процесс, который печатает "x is 7", должен будет "видеть", что x не равен 7 в момент, когда он выполняет свой if-тест, но тогда x должен стать 7 к тому времени printf()
читает его значение, чтобы распечатать его. Итак, что-то вроде:
Process #1: x = x - 1; // x becomes 6
Process #2: x = x - 1; // x becomes 5
Process #1: x = x + 1; // x becomes 6
Process #1: if (x != 7) // if-test succeeds, because x is 6
Process #2: x = x + 1; // x becomes 7
Process #1: printf("x is %d", x); // prints "x is 7"
Обратите внимание, что это только один из вышеперечисленных способов; особенно если x
не изменяется атомарно, есть множество других способов, которыми вещи могут стать странными, из-за выделения регистров, взаимодействия с кэшем ЦП, оптимизации компилятором и переупорядочения кода с использованием правила "как если" и т. д.