Как мне моделировать логическое И-вычисление в Promela неатомно?
Как мне моделировать логическое И-вычисление в Promela неатомно?
Я хочу смоделировать утверждение while (flag[j] == true && victim == i)
где И-оценка должна быть сделана неатомно.
Как это возможно?
1 ответ
Решение
loop:
if
:: flag[j] != true -> goto done
:: else
fi;
if
:: victim != i -> goto done
:: else
fi;
/* body of 'while' */
goto loop;
done:
/* after 'while' */
Заметьте, хотя у меня нет среды Spin передо мной, что заставляет вас думать, что условие в первую очередь атомарно? Я бы проверил что-то вроде:
byte i = 0
i++ >= 0 && i-- >= 0
never { assert (1 == i) }
Но, так или иначе, первый код выше показывает, как сделать его неатомарным, если это необходимо.