我正在写一个实现矩阵乘法的并行程序。
在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);发布于 2014-02-13 21:59:56
我想你正在寻找的是的线程屏障。您可以找到文档here
有4个步骤:
在要同步屏障的位置声明barr;
https://stackoverflow.com/questions/21752087
复制相似问题