Как я чередую эти процессы? - PullRequest
0 голосов
/ 16 мая 2018

Я только начинаю изучать чередование, и у меня есть программа с двумя следующими процессами:

Процесс # 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 Ответ

0 голосов
/ 16 мая 2018

Процесс, который печатает "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 не изменяется атомарно, существует множество других способов, с помощью которых вещи могут также стать странными из-за распределения регистров, взаимодействия с кэшем ЦП, оптимизации компилятором и переупорядочения кода с использованием «как будто»Правило и т. д.

...