/* * ISA 563, Spring 2011 * Copyleft by Muhammad Abdulla */ #include #include #include #include /* * orderly_threads.c -- demonstrates the use mutexes for shared variable modification and access. */ #define MAXTH 20 #define MAX 50000 int arr[MAX+MAXTH]; int idx; // global index to array pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void *fill_array(void *tid) { while ( idx < MAX ) { pthread_mutex_lock( &mutex ); arr[idx] = idx; idx++; pthread_mutex_unlock( &mutex ); } pthread_exit(NULL); } int main(int argc, char *argv[]) { int rc; int i; memset(arr, 0, sizeof(arr)); pthread_t threads[MAXTH]; for( i = 0; i < MAXTH; i++) { rc = pthread_create(&threads[i], NULL, fill_array, (void *)i); if (rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } for ( i = 0; i < MAXTH; i++ ) { rc = pthread_join(threads[i], NULL); } for ( i = 0; i < MAX; i++ ) { if ( arr[i] != i ) { fprintf(stderr, "arr[%d]: %d\n", i, arr[i]); } } pthread_exit(NULL); }