clock_t是否计算所有线程、c++、pthreads的时间?

Does clock_t calculate the time of all threads, c++, pthreads?

假设我的代码是由 main() 组成的,在 main 中我调用了 2 个 运行 并行的线程。

假设 main 需要 5 秒才能完成,每个线程需要 10 秒才能完成。

如果我使用 clock_t 对主程序计时,假设 2 个线程 运行 并行,则程序实际花费的时间为 15 秒。

现在,如果我使用 clock_t 计时,我的时间是 15 秒还是 25 秒?

虽然线程 1 和线程 2 运行 并行,但是 clock_t() 会计算线程 1 和线程 2 使用的每个周期和 return 使用的周期总数?

我使用 windows mingw32 和 pthreads。

示例代码:

main(){
 clock_t begin_time ;

  for (unsigned int id = 0; id < 2; ++id)
  {
     pthread_create(&(threads[id]), NULL, thread_func, (void *) &(data[id]));
  }


  for (unsigned int id = 0; id < 2; ++id)
  {
      pthread_join(threads[id], NULL);
  }

time = double( clock () - begin_time )/CLOCKS_PER_SEC;
}

函数 clock 在不同的实现中做不同的事情(特别是在不同的 OS 中)。 Windows 中的 clock 函数给出了程序启动时的时钟滴答数,与线程数无关,也与机器是否忙碌无关[我相信这个设计决定源于古时候DOS和Windows2.x是时髦的东西,OS没办法"not running"东西]。

在 Linux 中,它给出了 CPU 使用的时间,据我所知,所有类 Unix 操作系统都是如此。

编辑澄清:我的 Linux 系统是这样说的:

In glibc 2.17 and earlier, clock() was implemented on top of times(2). For improved precision, since glibc 2.18, it is implemented on top of clock_gettime(2) (using the CLOCK_PROCESS_CPUTIME_ID clock).

也就是说,时间是给进程的,不是给当前线程的。

如果您使用 Windows,要获得进程实际使用的 CPU 时间,您可以(并且应该)使用 GetProcessTimes