type Share { int isempty; int data; } endtype decl Share head; enddecl int main() { decl int temp, x, pidone, pidtwo, semid, iter, counter; enddecl begin x = exposcall("Heapset"); semid = exposcall("Semget"); head = exposcall("Alloc", 2); head.isempty = 1; pidone = exposcall("Fork"); if (pidone == 0) then iter = 1; while(iter <= 100) do temp = exposcall("SemLock", semid); temp = head.isempty; if(temp == 1) then head.data = iter; head.isempty = 0; iter = iter + 2; endif; temp = exposcall("SemUnLock", semid); counter = 0; while(counter < 50) do counter = counter + 1; endwhile; endwhile; else pidtwo = exposcall("Fork"); if(pidtwo == 0) then iter = 2; while(iter <= 100) do temp = exposcall("SemLock", semid); temp = head.isempty; if(temp == 1) then head.data = iter; head.isempty = 0; iter = iter + 2; endif; temp = exposcall("SemUnLock", semid); endwhile; else iter = 1; while(iter <= 100) do temp = exposcall("SemLock", semid); temp = head.isempty; if(temp == 0) then x = head.data; head.isempty = 1; temp = exposcall("Write", -2, x); iter = iter + 1; endif; temp = exposcall("SemUnLock", semid); endwhile; endif; endif; temp = exposcall("Semrelease", semid); return 0; end }