我正在编写一个用于实现矩阵乘法的并行程序。
在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);
答案 0 :(得分:0)
我认为您正在寻找 pthread障碍。您可以找到文档here
有4个步骤: