📄 l-thread_fifo_so.c
字号:
#include "in.h"#define TRENI_MAX 500/*Il binario*/pthread_mutex_t condition_mutex=PTHREAD_MUTEX_INITIALIZER; pthread_cond_t condition_cond=PTHREAD_COND_INITIALIZER; void waiting(int min, int max){ sleep(rand()%(max-min+1) + min);}int occupabinario(int id){ pthread_mutex_lock(&condition_mutex);// {printf ("#-#-# Il Binario è occupato aspetto #-#-#\n",id); return -1;}printf ("#-#-# Il treno ~%d~ occupa i binari #-#-#\n",id);return 0;}void * gestione_dei_binari(void * i){printf ("-> Il treno %d è arrivto in stazione<-\n",(int)(i));occupabinario((int)(i));pthread_cond_signal(&condition_cond);//aiting(0,2);printf ("#-#-# Il treno ~%d~ libera i binari #-#-#\n",(int)(i));pthread_mutex_unlock(&condition_mutex);}void *stazione (void *num_treni){ int i; struct { int id; pthread_t treno; }treni[(int)(num_treni)]; /*creo i binari*/ /*Qui arrivano i treni e si creano i thread che li simulano*/ while(1){ for (i=1;i<(int)(num_treni)+1;i++) { treni[i].id=i; if (pthread_create(&treni[i].treno,NULL,gestione_dei_binari,(void *)(treni[i].id))) { perror("pthread_thread_create"); exit(-1); } }/*Aspetto che i thread che simulano i treni finiscano il loro lavoro e passino tutti*/ for (i=1; i<(int)(num_treni)+1; i++) if (pthread_join(treni[i].treno, NULL)){ perror("Pthread_join"); exit(0);}}//non capisco se lascio pthread_join worka come con la pthread_exit perhcè ?// pthread_exit((void *) 0);}int main(int argc, char *argv[]){ pthread_t station; int rc; pthread_attr_t attr; if (argc<2) { printf ("[*] L-thread : Usage ./l-thread num_trains [*]\n"); exit(0); } /*setto gli attributi per il thread che gestisce la stazione*/ pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); rc = pthread_create(&station, &attr, stazione, (void *)(atoi(argv[1]))); if (rc){ perror("pthread_create"); exit(-1); }pthread_join(station,NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -