#include<stdio.h>
#include<semaphore.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<pthread.h>
struct{
int data[5];
sem_t *mutex[5];
}sh;
char *name[]={"p1","p2","p3","p4","p5"};
void *work(void *);
main()
{
pthread_t tid[5];
int i;
for(i=0;i<5;i++)
{
sh.mutex[i]=sem_open(name[i],O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP,1);//
}
/* visit www.rgpv.tk for more */
pthread_setconcurrency(6);
for(i=0;i<5;i++)
pthread_create(&tid[i],NULL,work,&i);
for(i=0;i<5;i++)
pthread_join(tid[i],NULL);
for(i=0;i<5;i++)
sem_unlink(name[i]);
}
void *work(void *arg)
{
int p,i=1;
p=*((int *)arg);
while(i++<2)
{
sem_wait(sh.mutex[p]);
sem_wait(sh.mutex[(p+1)%5]);
/* aditya jain */
sh.data[p]=1;
printf("p%d[%d %d %d %d %d]\n",p
+1,sh.
data[0],sh.
data[1],sh.
data[2],sh.
data[3],sh.
data[4]); sleep(1);//eating
sh.data[p]=0;
sem_post(sh.mutex[p]);
sem_post(sh.mutex[(p+1)%5]);
sleep(2);//thinking
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c2VtYXBob3JlLmg+CiNpbmNsdWRlPGZjbnRsLmg+CiNpbmNsdWRlPHN5cy90eXBlcy5oPgojaW5jbHVkZTxzeXMvc3RhdC5oPgojaW5jbHVkZTx1bmlzdGQuaD4KI2luY2x1ZGU8cHRocmVhZC5oPgpzdHJ1Y3R7CiAgICAgICAgaW50IGRhdGFbNV07CiAgICAgICAgc2VtX3QgKm11dGV4WzVdOwogICAgfXNoOwpjaGFyICpuYW1lW109eyJwMSIsInAyIiwicDMiLCJwNCIsInA1In07CnZvaWQgKndvcmsodm9pZCAqKTsKbWFpbigpCnsKICAgICAgICBwdGhyZWFkX3QgdGlkWzVdOwogICAgICAgIGludCBpOwogICAgICAgIGZvcihpPTA7aTw1O2krKykKICAgICAgICB7CiAgICAgICAgICAgIHNoLm11dGV4W2ldPXNlbV9vcGVuKG5hbWVbaV0sT19DUkVBVCxTX0lSVVNSfFNfSVdVU1J8U19JUkdSUHxTX0lXR1JQLDEpOy8vCiAgICAgICAgfQogICAgICAgIC8qIHZpc2l0IHd3dy5yZ3B2LnRrIGZvciBtb3JlICovCiAgICAgICAgcHRocmVhZF9zZXRjb25jdXJyZW5jeSg2KTsKICAgICAgICBzZXRidWYoc3Rkb3V0LE5VTEwpOwogICAgICAgIGZvcihpPTA7aTw1O2krKykKICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoJnRpZFtpXSxOVUxMLHdvcmssJmkpOwogICAgICAgIGZvcihpPTA7aTw1O2krKykKICAgICAgICAgICAgcHRocmVhZF9qb2luKHRpZFtpXSxOVUxMKTsKICAgICAgICBmb3IoaT0wO2k8NTtpKyspCiAgICAgICAgICAgIHNlbV91bmxpbmsobmFtZVtpXSk7Cn0Kdm9pZCAqd29yayh2b2lkICphcmcpCnsKICAgIGludCBwLGk9MTsKICAgIHA9KigoaW50ICopYXJnKTsKICAgIHdoaWxlKGkrKzwyKQogICAgewogICAgICAgIHNlbV93YWl0KHNoLm11dGV4W3BdKTsKICAgICAgICBzZW1fd2FpdChzaC5tdXRleFsocCsxKSU1XSk7CiAgICAgICAgLyogYWRpdHlhIGphaW4gKi8KICAgICAgICBzaC5kYXRhW3BdPTE7CiAgICAgICAgcHJpbnRmKCJwJWRbJWQgJWQgJWQgJWQgJWRdXG4iLHArMSxzaC5kYXRhWzBdLHNoLmRhdGFbMV0sc2guZGF0YVsyXSxzaC5kYXRhWzNdLHNoLmRhdGFbNF0pOwogICAgICAgIHNsZWVwKDEpOy8vZWF0aW5nCiAgICAgICAgc2guZGF0YVtwXT0wOwogICAgICAgIHNlbV9wb3N0KHNoLm11dGV4W3BdKTsKICAgICAgICBzZW1fcG9zdChzaC5tdXRleFsocCsxKSU1XSk7CiAgICAgICAgc2xlZXAoMik7Ly90aGlua2luZwogICAgfQp9