#include #include #include #include static int nthreads = 10, delay = 5, sum = 1; int parse_args(int argc, char *argv[], int *nthreads, int* delay){ if ((argc != 3) || ((*nthreads = atoi(argv[1])) == 0) || ((*delay = atoi(argv[2])) == 0)) { fprintf (stderr, "Usage: %s nthreads delay\n", argv[0]); return(-1); } return(0); } void spin(){ int j; for(j=0; j< delay; j++); } void *updater(void *ptr){ int i; spin(); i = sum; spin(); i++; spin(); sum = i; spin(); pthread_exit(NULL); } int main(int argc, char *argv[]){ int i; if(parse_args(argc, argv, &nthreads, &delay) < 0){ exit(EXIT_FAILURE); } else { pthread_t threads[nthreads]; for(i = 0; i < nthreads ; i++) pthread_create(&threads[i],NULL,updater,NULL); for(i = 0; i < nthreads ; i++) pthread_join(threads[i],NULL); fprintf(stderr, "sum = %d\n", sum); exit(EXIT_SUCCESS); } }