我有一个应用程序,其中pthread_join
是瓶颈。我需要帮助来解决此问题。
void *calc_corr(void *t) {
begin = clock();
// do work
end = clock();
duration = (double) (1000*((double)end - (double)begin)/CLOCKS_PER_SEC);
cout << "Time is "<<duration<<"\t"<<h<<endl;
pthread_exit(NULL);
}
int main() {
start_t = clock();
for (ii=0; ii<16; ii++)
pthread_create(&threads.p[ii], NULL, &calc_corr, (void *)ii);
for (i=0; i<16; i++)
pthread_join(threads.p[15-i], NULL);
stop_t = clock();
duration2 = (double) (1000*((double)stop_t - (double)start_t)/CLOCKS_PER_SEC);
cout << "\n Time is "<<duration2<<"\t"<<endl;
return 0;
}
在线程函数中打印的时间在 40ms-60ms 范围内,而在主函数中打印的时间在 650ms-670ms 中。具有讽刺意味的是,我的序列代码在 650毫秒至670毫秒的时间内运行。如何减少
pthread_join
花费的时间?提前致谢!
最佳答案
在Linux上,clock()
测量组合的CPU时间。 它不测量挂墙时间。
这说明了为什么您获得~640 ms = 16 * 40ms
。 (如评论中指出的)
要测量墙壁时间,您应该使用类似以下内容的方法:
gettimeofday()
clock_gettime()
关于c++ - pthread_join成为瓶颈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9087966/