% % The parent transaction forces two interacting processes to execute % concurrently while synchronizing themselves. It is based on % Example 4 in the DBPL'97 paper. First, processes a and b interleave, % then process a executes alone, then process b executes alone, then % they interleave again. % parent :- process(a) # process(b). process(a) :- task(a1) * task(a2) * task(a3) * task(a4) * task(a5) * task(a6) * ins(start(b3)) * start(a7) * task(a7) * task(a8). process(b) :- task(b1) * task(b2) * start(b3) * task(b3) * task(b4) * task(b5) * task(b6) * ins(start(a7)) * task(b7) * task(b8). task(I) :- monitor(task(I)). % Before executing the parent transaction a second time, cleanup the % database by executing the following transaction. % cleanup :- del(start(A)) * del(start(B)).