gpt4 book ai didi

c - 分配通过pthread计算的值

转载 作者:行者123 更新时间:2023-11-30 15:18:11 25 4
gpt4 key购买 nike

我有一个计算积分的函数,如下所示:

/* Complete this function to perform the trapezoidal rule using pthreads. */
void *compute_using_pthreads(void *inputs)
{
double integral;
int k;
threadParams *args = (threadParams *) inputs;

float a = args->a;
float b = args->b;
int n = args->n;
float h = args->h;

integral = (f(a) + f(b))/2.0;

for (k = 1; k <= n-1; k++) {
integral += f(a+k*h);
}

integral = integral*h;

printf("Solution computed using pthreads = %f \n", integral);
}

它在main中被调用,如下所示:

int i;
for(i = 0; i < NUM_THREADs; i++) {
trapThread = (threadParams *) malloc(sizeof(threadParams));
trapThread->a = a;
trapThread->b = b;
trapThread->n = n;
trapThread->h = (b - a) / (float) n;

if (pthread_create(&slaveThread[i], NULL, *compute_using_pthreads, (void *) trapThread) != 0) {
printf("Looks like something went wrong..\n");
return -1;
}
}

我的问题是,由于我正在运行 4 个线程,因此使用 pthreads = 计算的结果字符串 Solution 打印了四次。

我的问题是,如何在 main 中调用compute_using_pthreads 并将其返回数据保存到 double 变量中?

最佳答案

将另一个变量 res 添加到结构 threadParams 并将结果存储在其中。

      integral = integral*h;
args->res = integral;

现在,从 main() 中,您将能够读取每个线程计算的积分

目前,您没有访问 malloc 内存的标识符,因为您使用的是相同的变量 trapThread。相反,请使用数组或经过 malloc 处理的指针列表,以便稍后能够访问它。

显然,你的主线程必须等待其他线程完成,即如果它退出,那么整个进程就会终止。

关于c - 分配通过pthread计算的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com