Я довольно новичок в SPIN и Promela, и я наткнулся на эту ошибку, когда пытаюсь проверить свойство liveness в своих моделях.Promela SPIN unreached in proctype error
Код ошибки:
unreached in proctype P
(0 of 29 states)
unreached in proctype monitor
mutex_assert.pml:39, state 1, "assert(!((mutex>1)))"
mutex_assert.pml:42, state 2, "-end-"
(2 of 2 states)
unreached in init
(0 of 3 states)
unreached in claim ltl_0
_spin_nvr.tmp:10, state 13, "-end-"
(1 of 13 states)
pan: elapsed time 0 seconds
Код в основном реализация алгоритма Питерсона и я проверил на безопасность и это, кажется, действует. Но всякий раз, когда я пытаюсь проверить свойство liveness с помощью ltl {[] ((wait -> <> (cs)))}, он сталкивается с вышеуказанными ошибками. Я не уверен, что они означают, так что я не знаю, как поступить ...
Мой код выглядит следующим образом:
#define N 3
#define wait (P[1]@WAIT)
#define cs (P[1]@CRITICAL)
int pos[N];
int step[N];
int enter;
byte mutex;
ltl {[]((wait -> <> (cs)))}
proctype P(int i) {
int t;
int k;
WAIT:
for (t : 1 .. (N-1)){
pos[i] = t
step[t] = i
k = 0;
do
:: atomic {(k != i && k < N && (pos[k] < t|| step[t] != i)) -> k++}
:: atomic {k == i -> k++}
:: atomic {k == N -> break}
od;
}
CRITICAL:
atomic {mutex++;
printf("MSC: P(%d) HAS ENTERED THE CRITICAL SECTION.\n", i);
mutex--;}
pos[i] = 0;
}
init {
atomic { run P(0); }
}
Большое вам спасибо! Да, я редактировал мой код в последний раз, прежде чем публиковать его здесь, и это, похоже, исправило его. Что означает код ниже? Я предположил, что это часть ошибки? не получено в претензии ltl_0 _spin_nvr.tmp: 10, state 13, "-end-" – firearian
@firearian Я обновил свое сообщение, чтобы ответить на ваш вопрос. Опять же, обязательно имейте это в виду, ** здесь нет ошибки **. –
Большое вам спасибо! Это отвечает на мой вопрос! Небольшое продолжение, если можно. Я должен понять, что это означает, что свойство ltl проверено успешно, потому что процесс никогда не входит в «never ltl_0»? – firearian