Застрял на параллельном примере программирования в псевдокоде (атомарные действия / мелкозернистая атомарность) - PullRequest
2 голосов
/ 16 октября 2011

Моя книга представляет простой пример, в котором я немного запутался:

В нем говорится: «рассмотрите следующую программу и предположите, что детализированные атомарные действия читают и записывают переменные:»

int y = 0, z = 0;
co x = y+z; // y=1; z=2; oc;

"Если x = y + z реализован путем загрузки регистра с y и последующего добавления к нему z, конечное значение x может быть 0,1,2 или 3."

2? Как работает 2?

Примечание: co запускает параллельный процесс и // обозначает параллельные операторы

Ответы [ 2 ]

5 голосов
/ 16 октября 2011

В вашей программе есть две параллельные последовательности:

Последовательность 1: x = y+z;

Последовательность 2: y=1; z=2;

Операции последовательности 1:

  1. y Скопируйте значение y в регистр.
  2. + z Добавьте значение z к значению в регистре.
  3. x =Скопируйте значение регистра в x.

Операции последовательности 2:

  1. y=1; Установите значение y равным 1.
  2. z=2; Установите значение z равным 2.

Эти две последовательности выполняются одновременно, хотя шаги в последовательности должны выполняться по порядку.Таким образом, вы можете получить значение x в 2 в следующей последовательности:

  1. y=0
  2. z=0
  3. y Скопировать значениеу в регистр.(значение регистра теперь равно 0)
  4. y=1; Установите значение y равным 1. (не влияет на результат, мы уже скопировали y в регистр)
  5. z=2; Установите значение z равным 2.
  6. + z Добавьте значение z к значению в регистре.(значение регистра теперь равно 2)
  7. x = Скопируйте значение регистра в x.(значение x теперь равно 2)
0 голосов
/ 16 октября 2011

Поскольку предполагается, что они работают параллельно, я думаю, что еще более простым случаем может быть y = 0, z = 2, когда происходит присвоение x = y + z.

...