【发布时间】:2014-03-12 04:54:12
【问题描述】:
我正在编写一个用于实现矩阵乘法的并行程序。
在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);
【问题讨论】:
标签: c multithreading pthreads sync