gpt4 book ai didi

c - 我如何使用屏障同步此代码?

转载 作者:行者123 更新时间:2023-11-30 17:39:38 24 4
gpt4 key购买 nike

我正在编写一个并行程序来实现矩阵乘法。

main 函数中,我首先创建了一个线程池 (=num_threads),然后在每个线程上实现函数 mult线程。每个线程负责计算输出矩阵的某些行。

但是得到的输出不正确。

我猜这是因为主线程退出 for 循环并释放池时所有线程都没有创建。 (因为线程 pool_free 函数等待生成的线程完成)。

如果我使用sleep(1),它会为创建所有线程提供足够的时间,并且获得的输出很好,但是有什么方法可以消除sleep > 因为我需要跟踪执行此代码所需的时间。

gettimeofday(&start, NULL);

int i1[num_threads];;
for(i=0;i<num_threads;i++){
i1[i] = i;
int err = threadpool_add_task(pool,Mult,(void *)&i1[i],1);
}

//sleep(1);

threadpool_free(pool,1);
gettimeofday(&end, NULL);

最佳答案

我认为您正在寻找pthread 屏障。您可以找到文档here

共有 4 个步骤:

  1. 声明一个pthread_barrier_t barr;
  2. 调用pthread_barrier_init(&barr, NULL, NUM_THREADS);
  3. 在您想要同步线程的位置调用 pthread_barrier_wait(&barr);
  4. 摧毁障碍。

关于c - 我如何使用屏障同步此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752087/

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