File tree 2 files changed +45
-0
lines changed
2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments