int flag0 = 0;
int flag1 = 0;

proctype P0 {
	do
	:: true ->
		store(flag0,1);
		
		if
		:: load(flag1,0) -> skip;
		fi;
		
		store(flag0,0);
	od;
}

proctype P1 {	
	do
	:: true ->
		do
		:: true ->
			store(flag1,0);
			if
			:: load(flag0,1) -> skip;
			:: load(flag0,0) ->
				store(flag1,1);
				if
				:: load(flag0,1) -> skip;
				:: load(flag0,0) -> break;
				fi;
			fi;
		od;

		store(flag1,0);		
	od;
}
