#include #include #include #include #include void *increase(void *vargp); void *decrease(void *vargp); int cnt = 0; int main(int argc, char **argv) { unsigned int niters; pthread_t t1,t2; if (argc != 2) { printf("Usage: %s \n", argv[0]); exit(2); } niters = atoll(argv[1]); pthread_create(&t1,NULL,increase,(void *)niters); pthread_create(&t2,NULL,decrease,(void *)niters); pthread_join(t1,NULL); pthread_join(t2,NULL); if (cnt != 0) { printf("Error! cnt=%d\n", cnt); } else { printf("Correct! cnt=%d\n", cnt); } exit(0); } void *increase(void *vargp) { unsigned i ,niters = (unsigned int)vargp; for ( i = 0; i < niters; i++) { cnt++; } return NULL; } void *decrease(void *vargp) { unsigned i, niters = (unsigned int)vargp; for ( i = 0; i < niters; i++) { cnt--; } return NULL; }