Skip to content

Commit 08b22a7

Browse files
committed
feat(learning-spin): add counter.pml and printer.pml
1 parent 0e0f976 commit 08b22a7

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

learning-spin/counter.pml

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// グローバル変数はプロセス間で共有される。
2+
// 初期値が指定されていない場合はゼロで初期化される。
3+
byte count;
4+
bool finished[2];
5+
6+
// カウンタの値をインクリメントする
7+
proctype Increment(byte index) {
8+
// read-modify-write
9+
count = count + 1;
10+
11+
finished[index] = true;
12+
}
13+
14+
init {
15+
run Increment(0);
16+
run Increment(1);
17+
18+
// 条件文を書いた場合、trueになるまでブロックするという意味になる。
19+
(finished[0] && finished[1]);
20+
// assert を使って検証したい条件を書く。
21+
assert(count == 2);
22+
}

learning-spin/printer.pml

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
bool printer_locked;
2+
bool scanner_locked;
3+
4+
proctype User() {
5+
if
6+
:: atomic { (!printer_locked) -> printer_locked = true };
7+
atomic { (!scanner_locked) -> scanner_locked = true };
8+
skip; // use printer and scanner
9+
scanner_locked = false;
10+
printer_locked = false;
11+
12+
:: atomic { (!scanner_locked) -> scanner_locked = true };
13+
atomic { (!printer_locked) -> printer_locked = true };
14+
skip; // use scanner and printer
15+
printer_locked = false;
16+
scanner_locked = false;
17+
fi
18+
}
19+
20+
init {
21+
run User();
22+
run User();
23+
}

0 commit comments

Comments
 (0)