I want to modify the multithread program on the Linux operating system using this Pthread API.
#include <pthread.h> #include <stdio.h> int sum; void *runner(void *param); int main(int argc, char *argv[]) { pthread_t tid pthread_attr_t attr; if (argc != 2) { fprintf(stderr, "usage: a.out <integer value>n"); return -1; } if (atoi(argv[1]) < 0) { fprintf(stderr, "%d must be >=0n", atoi(argv[1])); return -1; } pthread_attr_init(&attr); pthread_create(&tid, &attr, runner, argv[1]); pthread_join(tid, NULL); printf("sum = %dn", sum); } void *runner(void *param); { int i, upper = atoi(param); sum = 0; for (i = 1; i <= upper; i++) sum += i; pthread exit(0); }
I want to change that program into a program that has 2 threads that work together to add a number. But i don’t know how to change it, Thanks again for any help that can be offered. I am sorry,because I’m not good at explaining.
Advertisement
Answer
first there is 3 errors : the pthread tid
declaration has no “;”, then there is one at the end of your runner()*
function declaration, and last but not least, a underscore is missing on the last line pthread_exit(0)
beware ahah
ok for vars :
pthread_t tid; pthread_t tid2; pthread_attr_t attr; pthread_attr_t attr2;
and in the code after the ifs, add this :
pthread_attr_init(&attr); pthread_attr_init(&attr2); pthread_create(&tid, &attr, runner, argv[1]); pthread_create(&tid2, &attr2, runner, argv[2]); // not sure for argv[2]?
not sure for argv[2], it depends if it’s 2 different numbers?
pthread_join are no use, they are here only for pausing threads, i think that if you want them to work in parallel, you need to only do “pthread_create” and they should work in parallel (but was i saw on my CS class on parallel programming 3 years ago, it will never be “real real” parallel because only the OS can control this and you need to be some kind of a super root to be able to really control the threads
I mean it won’t be faster because it will not be real parallel prog