Skip to content
Advertisement

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 >=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

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement