All pastes #957579 Raw Edit

Something

public c v1 · immutable
#957579 ·published 2008-03-26 01:37 UTC
rendered paste body
#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <sys/wait.h>#include <stddef.h>#include <stdio.h>int main () {int ii;  struct sembuf Wait[5]   = { {0,-1,SEM_UNDO}, {1,-1,SEM_UNDO},{2,-1,SEM_UNDO}, {3,-1,SEM_UNDO},{4,-1,SEM_UNDO}};  struct sembuf Signal[5]   = { {0,1,SEM_UNDO}, {1,1,SEM_UNDO},{2,1,SEM_UNDO}, {3,1,SEM_UNDO},{4,1,SEM_UNDO}};  int ch, i, pid;  key_t mykey;  int semid;  union wait waitstatus;  struct sembuf OpList[2];  mykey = ftok("./a.out",'a');  semid = semget(mykey, 5, IPC_CREAT | 0600 );  semctl(semid,0,SETVAL,1);  semctl(semid,1,SETVAL,1);  semctl(semid,2,SETVAL,1);  semctl(semid,3,SETVAL,1);  semctl(semid,4,SETVAL,1);  if (fork()==0) { /* child */    OpList[0] = Wait[0];    OpList[1] = Wait[1];    printf("Waiting\n");    semop(semid,OpList,2);    printf("Unlocked\n");  } else { /* parent*/    sleep(3);    OpList[0] = Signal[0];    OpList[1] = Signal[1];    semop(semid,OpList,2);    wait3(&ch,0,NULL);  }  for (i = 0 ; i < 5 ; i++ )  {    pid = fork();    if (pid == 0) break;  }  if (pid == 0)  {    pid = getpid();    /* do the philosopher thing */    	int ii = 0;	for (ii = 0 ; ii < 5 ; ii++ ){ 	OpList[0] = Wait[i];   	OpList[1] = Wait[(i+1)%5];	semop(semid,OpList,2);	printf("philosopher %d eating using forks %d and %d \n", pid, i, (i+1)%5);	sleep(1);	OpList[0] = Signal[i];   	OpList[1] = Signal[(i+1)%5];	semop(semid,OpList,2);		printf("philosopher %d thinking\n", pid);	sleep(4);	}		return 0;  }  else  {    for (i = 0 ; i < 5 ; i++){      wait3(&ch,0,NULL);    }    /* remove the semaphore */    return 0;  }}