让我们说我的代码是由main()构成的,在main中我调用了2个并行运行的线程。
假设main需要5秒才能完成,每个线程需要10秒才能完成。
如果我使用clock_t计时主程序,假设2个线程并行运行,程序的实际时间为15秒。
现在,如果我使用clock_t计时,那会给我一个15秒或25秒的时间吗?
虽然线程1和线程2并行运行,但clock_t()会计算线程1和线程2使用的每个周期并返回使用的总周期数吗?
我使用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;
}
答案 0 :(得分:2)
函数clock
在不同的实现中做了不同的事情(特别是在不同的OS中)。 Windows中的clock
函数给出了程序启动时的时钟周期数,无论线程数是多少,无论机器是否忙碌[我相信这个设计决定源于古代的时候DOS和Windows 2.x是时髦的东西,操作系统没有办法“不运行”的东西]。
在Linux中,它提供了所使用的CPU时间,就像所有类Unix操作系统中的情况一样,据我所知。
编辑澄清:我的Linux系统说:
在glibc 2.17及更早版本中,clock()是在时间(2)之上实现的。 为了提高精度,从glibc 2.18开始,它实现在 clock_gettime(2)(使用CLOCK_PROCESS_CPUTIME_ID时钟)。
换句话说,时间是进程,而不是当前线程。
要获取进程使用的实际CPU时间,您可以(并且应该)使用GetProcessTimes