cs252/lab4-src/count.cc
2018-10-15 17:30:23 -04:00

55 lines
1.0 KiB
C++

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
pthread_mutex_t mutex;
int count;
void increment(int ntimes )
{
for ( int i = 0; i < ntimes; i++ ) {
pthread_mutex_lock(&mutex);
int c;
c = count;
c = c + 1;
count = c;
pthread_mutex_unlock(&mutex);
}
}
int main( int argc, char ** argv )
{
int n = 10000000;
pthread_t t1, t2;
pthread_attr_t attr;
pthread_mutex_init(&mutex, NULL);
pthread_attr_init( &attr );
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
printf("Start Test. Final count should be %d\n", 2 * n );
// Create threads
pthread_create( &t1, &attr, (void * (*)(void *)) increment,
(void *) n);
pthread_create( &t2, &attr, (void * (*)(void *)) increment,
(void *) n);
// Wait until threads are done
pthread_join( t1, NULL );
pthread_join( t2, NULL );
if ( count != 2 * n ) {
printf("\n****** Error. Final count is %d\n", count );
printf("****** It should be %d\n", 2 * n );
}
else {
printf("\n>>>>>> O.K. Final count is %d\n", count );
}
}