저는 SPIN 및 Promela에 대해 매우 익숙하며 내 모델에서 활성 속성을 확인할 때이 오류를 발견했습니다.Proctype 오류가 Promela SPIN에 전달되지 않았습니다.
오류 코드 :
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
코드는 기본적으로 피터슨의 알고리즘의 구현 내가 안전을 확인하고 유효한 것으로 보인다. 그러나 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); }
}
정말 고마워요! 예, 여기에 게시하기 전에 마지막으로 코드를 편집했는데 수정 한 것으로 보입니다. 그래도 아래의 코드는 무엇을 의미합니까? 나는 그것이 오류의 일부라고 생각 했는가? 에 도달하지 못함 claim ltl_0 _spin_nvr.tmp : 10, 상태 13, "-end-" – firearian
@firearian @firearian 질문에 대한 답변을 위해 내 게시물을 업데이트했습니다. 다시 ** 오류 **가 없음을 이해해야합니다. –
정말 고마워요! 그게 내 질문에 답해! 작은 후속 조치, 만약 내가 할 수 있습니다. 프로세스가 결코 "never ltl_0"을 입력하지 않기 때문에 ltl 속성이 성공적으로 확인되었음을 이해해야합니까? – firearian