multithreading - pthread third argument in c language -
i'd create threads
int joueur=3; // in case in "for" loop jouer(joueur); i used syntax
i have tried this:
int *joueur = malloc(sizeof(*joueur)); //if (joueur == null) //donotstartthethread_problemallocatingmemory(); pthread_create(&threads[joueur], null, jouer, (int *) joueur); jouer function void jouer(int joueur) { while(but_trouve==0) { pthread_mutex_lock (&mutex); for(joueur=0;joueur<nombre_joueurs;joueur++) if(labyrinthe[joueur_ligne[joueur]][(joueur_colonne[joueur])%4]="b") but_trouve=1; if (but_trouve==1) break; // si un joueur trouve le on termine la partie deplacer(joueur); // pthread_cond_signal (&condition); /* on délivre le signal : condition remplie */ pthread_mutex_unlock (&mutex); // fin de la zone protegee affiche(); } pthread_exit(null); } but have message now.
warning: passing argument 3 of ‘pthread_create’ incompatible pointer type [enabled default] pthread_create(&threads[threads[nombre_joueurs]], null, jouer, (int *) joueur); in file included /home/nouha/test.c:4:0: /usr/include/pthread.h:244:12: note: expected ‘void * (*)(void *)’ argument of type ‘void (*)(int)’ extern int pthread_create (pthread_t *__restrict __newthread, , thank reading,
you passing value of variable, expects address.
you can't pass joueur's address pthread_create() data parameter because it's local variable , deallocated when function returns, might happen before thread finishes working.
i suggest
int *joueur = malloc(sizeof(*joueur)); if (joueur == null) donotstartthethread_problemallocatingmemory(); pthread_create(&threads[joueur], null, jouer, (void *) joueur); note above, type of joueur int *, in example it's int * can't pass pthread_create() function casting void * because it's interpreted address, , doubt 3 valid one.
don't forget free joueur when thread done working poitner, because can't free before or same problem happen.
Comments
Post a Comment