gpt4 book ai didi

c - 为什么2个线程的执行比C中的1个线程慢?

转载 作者:行者123 更新时间:2023-12-03 12:44:57 24 4
gpt4 key购买 nike

我正在使用 pthread库来制作一个程序,用莱布尼茨公式找到 pi 的准确值。我正在这里处理共享资源。我的多线程函数如下所示:

void *Leibniz(void *vars)
{
struct variables *val = (struct variables *)vars;
int startLimit = val->start;
int endLimit = val->end;

int i;
for (i = startLimit; i <= endLimit; i++)
{
pthread_mutex_lock(&mutex);
sum += (pow(-1, i) / ((2 * i) + 1));
pthread_mutex_unlock(&mutex);
}
}
当我用 N 运行程序时迭代和 1 个线程,我平均在大约 4.5 秒内得到正确的输出。当我用两个线程运行同一个程序时,大约需要 18 秒。我必须使用多线程来使程序更快,但正在发生完全相反的情况。谁能解释为什么?

最佳答案

您使用锁来确保 sum += (pow(-1, i) / ((2 * i) + 1));一次只在一个线程中计算。只有当多个线程同时工作时,多线程才有可能更快。
互斥体和线程创建本身成本很高,这就是多线程非并行程序比单线程程序慢的原因。

What is your proposed solution?


没有共享资源。在这种情况下,为每个线程单独求和,然后最后求和。分而治之。

关于c - 为什么2个线程的执行比C中的1个线程慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66043467/

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