#include #include #include #define NUM_THREADS 10 typedef struct pair { int x; int y; pthread_mutex_t lock; } pair; void pair_init( pair *p ) { p->x = 5; p->y = 995; pthread_mutex_init( &p->lock, NULL ); } void pair_swap( pair *p ) { int tmp; pthread_mutex_lock( &p->lock ); tmp = p->x; p->x = p->y; p->y = tmp; pthread_mutex_unlock( &p->lock ); } int pair_sum( pair *p ) { int sum; pthread_mutex_lock( &p->lock ); sum = p->x + p->y; pthread_mutex_unlock( &p->lock ); return sum; } void *run( void * param ) { pair *p = (pair *) param; int i; for( i = 0; i < 100000; i++ ) { pair_swap( p ); if( pair_sum( p ) != 1000 ) { printf( "OOPS!!!\n" ); return NULL; } } return NULL; } int main( ) { pthread_t tarray[ NUM_THREADS ]; pair thePair; int i; pair_init( &thePair ); for( i = 0; i < NUM_THREADS; i++ ) pthread_create( &tarray[ i ], NULL, run, (void *) &thePair ); for( i = 0; i < NUM_THREADS; i++ ) pthread_join( tarray[ i ], NULL ); pthread_exit( NULL ); }