当我增加NTHREADS时,以下代码运行速度会变慢。为什么使用更多的线程会使程序运行速度变慢?有什么办法可以解决吗?有人说这是虚假分享,但我不太明白这个概念。
该程序基本上计算从1到100000000的总和。使用多线程的想法是将数字列表分成几个块,并并行计算每个块的总和以使计算更快。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define LENGTH 100000000
#define NTHREADS 2
#define NREPEATS 10
#define CHUNCK (LENGTH / NTHREADS)
typedef struct {
size_t id;
long *array;
long result;
} worker_args;
void *worker(void *args) {
worker_args *wargs = (worker_args*) args;
const size_t start = wargs->id * CHUNCK;
const size_t end = wargs->id == NTHREADS - 1 ? LENGTH : (wargs->id+1) * CHUNCK;
for (size_t i = start; i < end; ++i) {
wargs->result += wargs->array[i]; …Run Code Online (Sandbox Code Playgroud)