我想使用这个Pthread API修改Linux操作系统上的多线程程序。

#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);
}

我想把这个程序改成一个有两个线程的程序,它们一起工作来添加一个数字。但我不知道怎么改,再次感谢你能提供的帮助。对不起,我不善于解释。

最佳答案

首先有三个错误:pthread tid声明没有“;”,然后在runner()*函数声明的末尾有一个错误,最后一个但并非最不重要的是,最后一行缺少下划线
小心啊哈
适用于VAR:

    pthread_t tid;
    pthread_t tid2;
    pthread_attr_t attr;
    pthread_attr_t attr2;

在ifs后面的代码中,添加以下内容:
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]?

不确定argv[2],这取决于它是不是两个不同的数字?
pthread_join没有用,它们在这里只是用来暂停线程,我认为如果你想让它们并行工作,你只需要做“pthread_create”,它们应该并行工作(但三年前我在我的CS类中看到过并行编程,它永远不会是“真正真正的”并行,因为只有操作系统才能控制它,而您需要某种超级根才能真正控制线程
我是说
它不会更快,因为它不是真正的并行程序

10-07 19:32
查看更多