/* sum2.c - Let's modify original thread summation example. * Unfortunately, pthread_create allows only one argument as 4th parameter. * Compile this way: gcc sum2.c -pthread -o sum2 */ #include #include int sum; void * runner1 (void * param); void * runner2 (void * param); int main(int argc, char *argv[]) { pthread_t tid1, tid2; pthread_attr_t attr1, attr2; if (argc != 2) { fprintf(stderr, "usage: sum \n"); return -1; } pthread_attr_init(&attr1); pthread_attr_init(&attr2); /* Find the sum from 1 to n. */ pthread_create(&tid1, &attr1, runner1, argv[1]); /* Also accumulate the sum of the squares from 1 to n^2. */ pthread_create(&tid2, &attr2, runner2, argv[1]); pthread_join(tid1, NULL); pthread_join(tid2, NULL); printf("sum = %d\n", sum); } void * runner1(void *param) { int i, upper = atoi(param); sum = 0; for (i = 1; i <= upper; ++i) { printf("Thread 1 adding %d to the sum\n", i); sum += i; } pthread_exit(0); } void * runner2(void *param) { int i, upper = atoi(param); sum = 0; for (i = 1; i <= upper; ++i) { printf("Thread 2 adding %d to the sum\n", i); sum += i*i; } pthread_exit(0); }