#include #include #include #include #include #define THREADS 5 // deklariram strukturo za prenašanje argumentov v niti struct argumenti { int myID; // ID posamezne niti }; pthread_t filozof[THREADS]; pthread_mutex_t palcka[THREADS]; // instance struktur - vsak anit dobi svojo struct argumenti args[THREADS]; void *funkcijaNiti (void* arg){ int mojID; struct argumenti *args ; args = (struct argumenti *) arg; // vrni mi element myID iz strukture, ki je v pomnilniku shranjena na naslovu args: mojID = args->myID; for(int i = 0; i < 3; i++){ printf("Sem filozof %d-%d in razmisljam .... \n", mojID, i); usleep(3000*mojID*(5-i) + 1889*i); pthread_mutex_lock(&palcka[mojID]); printf("Filozof %d-%d pograbi DESNO palčko... \n", mojID, i); usleep(177989*(5-mojID) + 919*(i+3)); pthread_mutex_lock(&palcka[(mojID+1)%THREADS]); printf("Filozof %d-%d pograbi LEVO palčko... \n", mojID, i); usleep(19*mojID*i + 99*i); printf("Sem filozof %d-%d in jem .... \n", mojID, i); usleep(1973*mojID*i + 27*i); pthread_mutex_unlock(&palcka[(mojID+1)%THREADS]); printf("Filozof %d-%d spusti LEVO palčko... \n", mojID, i); usleep(75*mojID*i + 103*i); pthread_mutex_unlock(&palcka[mojID]); printf("Filozof %d-%d spusti DESNO palčko... \n", mojID, i); usleep(575*mojID*i + 103*i); } } int main () { printf("Start... \n"); // inicializacija ključavnic: for (int i=0; i