C语言多线程(pthread)环境下clock()函数的计时逻辑咨询
关于多线程中
clock()函数的行为说明 兄弟,这个问题问到点子上了,刚好我之前踩过类似的坑,给你把这个事儿捋得明明白白:
首先得明确clock()的标准定义:根据C语言的标准规范,clock()返回的是整个进程所使用的处理器时间的近似值,这里的核心是“整个进程”,不是单个线程。它统计的是从进程启动开始,到调用clock()这一刻,进程下所有线程占用CPU的时间总和(换算成时钟周期数)——注意,这不是挂钟时间(比如进程跑了5秒但CPU实际只工作了3秒,那clock()返回的是3秒对应的周期数)。
针对你说的酷睿2双核、两个线程调用clock()的场景,直接给结论:
- 两个线程调用
clock()拿到的数值是完全一致的,都是从进程启动以来,整个进程所有线程消耗的CPU时间总和。比如如果两个线程各自跑了1秒的CPU时间,那clock()返回的数值大概是2 * CLOCKS_PER_SEC(CLOCKS_PER_SEC是标准库定义的每秒时钟周期数,通常是1000000)。 - 它既不会只统计线程自身启动后的CPU时间,也不是进程启动后的挂钟时间,就是所有线程的CPU时间加总。
如果你的需求是统计单个线程的CPU时间,那clock()就满足不了了。在POSIX兼容系统(比如Linux)下,你得用pthread_getcpuclockid()先获取目标线程的CPU时钟ID,再调用clock_gettime()来获取该线程专属的CPU使用时间,这样才能精准拿到单个线程的处理器消耗。
内容的提问来源于stack exchange,提问作者mathreadler
相关产品推荐
相关产品推荐

