#include #include #include #include int myglobal=0; //Variabile globale pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; void *thread_incrementa(void *arg) { int i,j; void *val; //for (i=0; i<1000000; i++); pthread_mutex_lock(&mymutex); for ( i=0; i<20; i++ ){ j=myglobal; //variabile locale temporanea j=j-1; printf("thread_decr\n"); myglobal=j; } pthread_mutex_unlock(&mymutex); pthread_exit(val); } int main(void){ pthread_t mythread; int i; void *status; if(pthread_create(&mythread,NULL,thread_incrementa,NULL) ) { printf("errore thread."); exit(1); } pthread_mutex_lock(&mymutex); for ( i=0; i<20; i++) { myglobal=myglobal+1; printf("main incr\n"); } pthread_mutex_unlock(&mymutex); if(pthread_join(mythread,(void*)&status)){printf("errore join."); exit(1); } printf("\n myglobal uguale %d\n",myglobal); exit(0); }