#include #include #include #include volatile int counter = 0; int loops; sem_t mysem; void* worker(void* arg) { int i; sem_wait(&mysem); for (i = 0; i < loops; i++) { counter++; } sem_post(&mysem); return NULL; } int main(int argc, char* argv[]) { if (argc != 2) { fprintf(stderr, "usage: threads \n"); exit(1); } loops = atoi(argv[1]); sem_init(&mysem, 0, 1); pthread_t p1, p2; printf("Initial value : %d\n", counter); pthread_create(&p1, NULL, worker, NULL); pthread_create(&p2, NULL, worker, NULL); pthread_join(p1, NULL); pthread_join(p2, NULL); printf("Final value : %d\n", counter); return 0; }