clinuxmultithreadingpthreadsposix-api

Thread Program on Linux (Posix Thread)


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 >=0\n", atoi(argv[1]));
        return -1;
    }

    pthread_attr_init(&attr);
    pthread_create(&tid, &attr, runner, argv[1]);
    pthread_join(tid, NULL);

    printf("sum = %d\n", 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.


Solution

  • 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