Título: Cambiar De Semaforo A Tuberias Publicado por: candycrush en 30 Agosto 2014, 02:02 am Saludos.. Tengo El Siguiente Codigo... en el que utilizo semaforos... lo cambiare a utilizar pipes...
que recomiendan que haga?? cuales son similitudes entre las operaciones entre semaforos y pipes... gracias #include<stdio.h> #include<semaphore.h> #include<pthread.h> #define N 5 #define PENSANDO 0 #define HAMBRIENTO 1 #define COMIENDO 2 #define IZQUIERDO (f_num+4)%N #define DERECHO (f_num+1)%N sem_t mutex; sem_t S[N]; void * filosofo(void *num); void toma_palillo(int); void deja_palillo(int); void probar(int); int estado[N]; int fil_num[N]={0,1,2,3,4}; int main() { int i; pthread_t thread_id[N]; sem_init(&mutex,0,1); for(i=0;i<N;i++) sem_init(&S,0,0); for(i=0;i<N;i++) { pthread_create(&thread_id,NULL,filosofo,&fil_num); printf("Filosofo %d Esta Pensando\n",i+1); } for(i=0;i<N;i++) pthread_join(thread_id,NULL); } void *filosofo(void *num) { while(1) { int *i = num; sleep(10); toma_palillo(*i); sleep(10); deja_palillo(*i); } } void toma_palillo(int f_num) { sem_wait(&mutex); estado[f_num] = HAMBRIENTO; printf("Filosofo %d Esta Hambriento\n",f_num+1); probar(f_num); sem_post(&mutex); sem_wait(&S[f_num]); sleep(30); } void probar(int f_num) { if (estado[f_num] == HAMBRIENTO && estado[IZQUIERDO] != COMIENDO && estado[DERECHO] != COMIENDO) { estado[f_num] = COMIENDO; printf("Filosofo %d Toma los palillos %d y %d\n\n",f_num+1,IZQUIERDO+1,f_num+1); printf("Filosofo %d Esta Comiendo\n\n",f_num+1); sem_post(&S[f_num]); sleep(30); } else { printf("Filosofo %d Esta Esperando por palillos\n\n",f_num+1); } } void deja_palillo(int f_num) { sem_wait(&mutex); estado[f_num] = PENSANDO; printf("Filosofo %d Deja los palillos %d y %d en la mesa\n",f_num+1,IZQUIERDO+1,f_num+1); printf("Filosofo %d Esta Pensando\n",f_num+1); probar(IZQUIERDO); probar(DERECHO); sem_post(&mutex); sleep(30); } |