我有一个应用程序,其中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/

    10-11 00:23