首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用barrier同步此代码?

如何使用barrier同步此代码?
EN

Stack Overflow用户
提问于 2014-02-13 18:52:47
回答 1查看 144关注 0票数 0

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

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

但是得到的输出是不正确的。

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

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

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2014-02-13 21:59:56

我想你正在寻找的是的线程屏障。您可以找到文档here

有4个步骤:

在要同步屏障的位置声明barr;

  • Call NUM_THREADS);

  • Call pthread_barrier_wait(&barr); pthread_barrier_t pthread_barrier_init(&barr,NULL,pthread_barrier_tpthread_barrier_init。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21752087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档