@@ -18,31 +18,59 @@ int X; // boolean variable to test mutual exclusion
1818
1919void * thr1 (void * _ ) {
2020 while (1 ) {
21+ __VERIFIER_atomic_begin ();
2122 b1 = 1 ;
23+ __VERIFIER_atomic_end ();
2224 __VERIFIER_atomic_begin ();
2325 x = 1 ;
2426 __VERIFIER_atomic_end ();
27+ __VERIFIER_atomic_begin ();
2528 int y1 = y ;
29+ __VERIFIER_atomic_end ();
2630 if (y1 != 0 ) {
2731 __VERIFIER_atomic_begin ();
2832 b1 = 0 ;
2933 __VERIFIER_atomic_end ();
34+ __VERIFIER_atomic_begin ();
3035 y1 = y ;
31- while (y != 0 ) {};
36+ __VERIFIER_atomic_end ();
37+ while (y1 != 0 ) {
38+ __VERIFIER_atomic_begin ();
39+ y1 = y ;
40+ __VERIFIER_atomic_end ();
41+ };
3242 continue ;
3343 }
3444 __VERIFIER_atomic_begin ();
3545 y = 1 ;
3646 __VERIFIER_atomic_end ();
47+ __VERIFIER_atomic_begin ();
3748 int x1 = x ;
49+ __VERIFIER_atomic_end ();
3850 if (x1 != 1 ) {
51+ __VERIFIER_atomic_begin ();
3952 b1 = 0 ;
53+ __VERIFIER_atomic_end ();
54+ __VERIFIER_atomic_begin ();
4055 int b21 = b2 ;
41- while (b21 >= 1 ) {};
56+ __VERIFIER_atomic_end ();
57+ while (b21 >= 1 ) {
58+ __VERIFIER_atomic_begin ();
59+ b21 = b2 ;
60+ __VERIFIER_atomic_end ();
61+ };
62+ __VERIFIER_atomic_begin ();
4263 y1 = y ;
64+ __VERIFIER_atomic_end ();
4365 if (y1 != 1 ) {
66+ __VERIFIER_atomic_begin ();
4467 y1 = y ;
45- while (y1 != 0 ) {};
68+ __VERIFIER_atomic_end ();
69+ while (y1 != 0 ) {
70+ __VERIFIER_atomic_begin ();
71+ y1 = y ;
72+ __VERIFIER_atomic_end ();
73+ };
4674 continue ;
4775 }
4876 }
@@ -55,21 +83,35 @@ void *thr1(void *_) {
5583 __VERIFIER_atomic_begin ();
5684 y = 0 ;
5785 __VERIFIER_atomic_end ();
86+ __VERIFIER_atomic_begin ();
5887 b1 = 0 ;
88+ __VERIFIER_atomic_end ();
5989 return 0 ;
6090}
6191
6292void * thr2 (void * _ ) {
6393 while (1 ) {
94+ __VERIFIER_atomic_begin ();
6495 b2 = 1 ;
96+ __VERIFIER_atomic_end ();
97+ __VERIFIER_atomic_begin ();
6598 x = 2 ;
99+ __VERIFIER_atomic_end ();
100+ __VERIFIER_atomic_begin ();
66101 int y2 = y ;
102+ __VERIFIER_atomic_end ();
67103 if (y2 != 0 ) {
104+ __VERIFIER_atomic_begin ();
68105 b2 = 0 ;
106+ __VERIFIER_atomic_end ();
69107 __VERIFIER_atomic_begin ();
70108 y2 = y ;
71109 __VERIFIER_atomic_end ();
72- while (y2 != 0 ) {};
110+ while (y2 != 0 ) {
111+ __VERIFIER_atomic_begin ();
112+ y2 = y ;
113+ __VERIFIER_atomic_end ();
114+ };
73115 continue ;
74116 }
75117 __VERIFIER_atomic_begin ();
@@ -79,15 +121,29 @@ void *thr2(void *_) {
79121 int x2 = x ;
80122 __VERIFIER_atomic_end ();
81123 if (x2 != 2 ) {
124+ __VERIFIER_atomic_begin ();
82125 b2 = 0 ;
126+ __VERIFIER_atomic_end ();
83127 __VERIFIER_atomic_begin ();
84128 int b12 = b1 ;
85129 __VERIFIER_atomic_end ();
86- while (b12 >= 1 ) {};
130+ while (b12 >= 1 ) {
131+ __VERIFIER_atomic_begin ();
132+ b12 = b1 ;
133+ __VERIFIER_atomic_end ();
134+ };
135+ __VERIFIER_atomic_begin ();
87136 y2 = y ;
137+ __VERIFIER_atomic_end ();
88138 if (y2 != 2 ) {
139+ __VERIFIER_atomic_begin ();
89140 y2 = y ;
90- while (y2 != 0 ) {};
141+ __VERIFIER_atomic_end ();
142+ while (y2 != 0 ) {
143+ __VERIFIER_atomic_begin ();
144+ y2 = y ;
145+ __VERIFIER_atomic_end ();
146+ };
91147 continue ;
92148 }
93149 }
@@ -97,8 +153,12 @@ void *thr2(void *_) {
97153 X = 1 ;
98154 assert (X >= 1 );
99155 // end: critical section
156+ __VERIFIER_atomic_begin ();
100157 y = 0 ;
158+ __VERIFIER_atomic_end ();
159+ __VERIFIER_atomic_begin ();
101160 b2 = 0 ;
161+ __VERIFIER_atomic_end ();
102162 return 0 ;
103163}
104164
0 commit comments