/* in /cs/cs3013/public/example/prodcons.c */ #include int produced, consumed; /* semaphores */ int *pn; main() { int produce(), consume(); char *shmcreate(); pn = (int *)shmcreate(sizeof(int)); *pn = 0; consumed = screate(0); produced = screate(1); CreateProcess(produce); consume(); sdelete(consumed); sdelete(produced); shmdelete(pn); } produce() { int i; for (i=0; i<5; i++) { swait(consumed); (*pn)++; /* increment n by 1 */ ssignal(produced); } } consume() { int i; for (i=0; i<5; i++) { swait(produced); printf("n is %d\n", *pn); /* print value of n */ ssignal(consumed); } } CreateProcess(int (*pFunc)()) { int pid; if ((pid = fork()) == 0) { (*pFunc)(); exit(0); } return(pid); }