TACHE Prod(void) { puts("------> Start Prod"); while(1) { puts("------> Prod : puis-je?"); s_wait(mySem); puts("------> Prod : je prod"); field.file[field.fin] = field.fin; field.fin = (field.fin+1) % MAX_TACHES; puts("------> Prod : go"); s_signal(mySem2); s_signal(mySem2); s_signal(mySem2); } fin_tache(); }
main(int argc,char *argv[]){ int shmid = init(shmkey); signal(SIGUSR2,handler1); int shpkey = init(pkey); sem1 = sem_init(semkey1,0); sem2 = sem_init(semkey2,0); pid = (int*)shmat(shmid,NULL,0); if(pid == (int*)-1) { printf("shmat error!!\n"); exit(0); } spointer = (char*)shmat(shpkey,NULL,0); if(spointer == (char*)-1){ printf("Shmget error2!!\n"); } scpid= *pid; printf("%d\n",scpid); *pid = getpid(); printf("process id is %d\n",*pid); s_signal(sem2); sleep(5); printf("signal sent\n"); while(1){signal(SIGUSR2,handler1);} }
TACHE Conso2(void) { puts("------> Start Conso 2"); while(1) { puts("------> Conso 2 : puis-je ?"); s_wait(mySem2); printf("Conso 2 : j'ai mangé : %d\n",field.file[field.deb]); field.deb = (field.deb+1) % MAX_TACHES; s_signal(mySem); puts("------> Conso 2 : go"); } fin_tache(); }
void handler1(){ printf("handler1 is on.............\n"); printf("%s\n",spointer); char *sp = spointer; int i=0; while(*sp!='|') { rd[i] = *sp; printf("%c ",rd[i] ); sp++; i++; } memset(spointer,'\0',10); char ws[5] ; ws[0]='w';ws[1]='s';ws[2]=rd[0];ws[3]='\0'; char rs[5] ; rs[0]='r';rs[1]='s';rs[2]=rd[0];rs[3]='\0'; if(mkfifo(ws,0666) == -1){ printf("mkfifo error ws\n"); exit(0); } if(mkfifo(rs,0666) == -1){ printf("mkfifo error\n"); exit(0); } s_signal(sem1); fr = open(rs,O_RDONLY); if(fr==-1){ printf("open error!!\n"); exit(0); } fw = open(ws,O_WRONLY); if(fw == -1){ printf("open error!!\n"); exit(0); } printf("Awesomee\n"); pthread_t pwrite,pread; pthread_create(&pread,NULL,fiforead,(void*)0); pthread_create(&pwrite,NULL,fiforead,(void*)0); pthread_join(pread,NULL); pthread_join(pwrite,NULL); }
static void * server_thread(void *vp) { SERVER *sp = (SERVER *) vp; if (debug) fprintf(stderr, "server_thread: Started.\n"); s_signal(SIGUSR1, sigusr1_handler); server_run_all(sp); pthread_mutex_lock(&sp->mtx); sp->state = 0; pthread_mutex_unlock(&sp->mtx); if (debug) fprintf(stderr, "server_thread: Terminating.\n"); return NULL; }