小编Zcy*_*Zcy的帖子

多线程中的错误共享

当我增加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)

c multithreading pthreads

0
推荐指数
1
解决办法
1405
查看次数

标签 统计

c ×1

multithreading ×1

pthreads ×1