/* Baseado em código de * http://www.csc.villanova.edu/~mdamian/threads/posixsem.html * e no tutorial em e no tutorial em https://computing.llnl.gov/tutorials/pthreads/#Mutexes */ #include #include #include #define NITER 1000000000 #define VEZES 5 long int count1=0; long int count2=0; pthread_mutex_t mutex1; pthread_mutex_t mutex2; void * ThreadAdd1 (void * a) { long int i; for (i=0; i<(long int)NITER; i++) { pthread_mutex_lock(&mutex1); count1++; pthread_mutex_unlock(&mutex1); } return NULL; } void * ThreadAdd2 (void * a) { long int i; for (i=0; i<(long int)NITER; i++) { pthread_mutex_lock(&mutex2); count2++; pthread_mutex_unlock(&mutex2); } return NULL; } int main() { int i; pthread_t tid[2*VEZES]; pthread_mutex_init(&mutex1, NULL); pthread_mutex_init(&mutex2, NULL); for (i=0; i