are shared by several threads.
#define _REENTRANT #include <stdio.h> #include <thread.h> /* sample array data structure */ struct { mutex_t data_lock[5]; int int_val[5]; float float_val[5]; } Data; /* thread function */ void *Add_to_Value(); main() { int i; /* initialize the mutexes and data */ for (i=0; i<5; i++) { mutex_init(&Data.data_lock[i], USYNC_THREAD, 0); Data.int_val[i] = 0; Data.float_val[i] = 0; } /* set concurrency and create the threads */ thr_setconcurrency(4); for (i=0; i<5; i++) thr_create(NULL, 0, Add_to_Value, (void *)(2*i), 0, NULL); /* wait till all threads have finished */ for (i=0; i<5; i++) thr_join(0,0,0); /* print the results */ printf("Final Values.....\n"); for (i=0; i<5; i++) { printf("integer value[%d] =\t%d\n", i, Data.int_val[i]); printf("float value[%d] =\t%.0f\n\n", i, Data.float_val[i]); } return(0); } /* Threaded routine */ void *Add_to_Value(void *arg) { int inval = (int) arg; int i; for (i=0;i<10000;i++){ mutex_lock(&Data.data_lock[i%5]); Data.int_val[i%5] += inval; Data.float_val[i%5] += (float) 1.5 * inval; mutex_unlock(&Data.data_lock[i%5]); } return((void *)0); }