我想知道我是否可以计算每个线程的运行时间。 我使用pthread在C ++中实现了一个多线程程序。 众所周知,每个线程都会与CPU竞争。 我可以使用clock()函数计算每个线程消耗的实际CPU时钟数吗?
我的程序看起来像:
Class Thread ()
{
Start();
Run();
Computing();
};
Start()是启动多个线程。然后每个线程都会运行Computing函数来做某事。我的问题是如何计算计算功能的每个线程的运行时间
答案 0 :(得分:3)
不,你不能使用clock
。处理器可以在Start
和Computing
调用之间切换到另一个线程,因此您将计算多个线程的时间。你需要在一个线程中使用tick计数器本地。
答案 1 :(得分:1)
您使用的是什么平台?如果您正在使用Linux并且在内核上> 2.6.26您可以使用RUSAGE_THREAD
标记getrusage
:
struct rusage usage
getrusage(RUSAGE_THREAD, &usage);
在struct rusage
内,您会发现ru_utime
和ru_stime
分别跟踪用户时间和系统时间。在开始时调用一次,然后调用一次,即可获得增量。
答案 2 :(得分:1)
GNU libc和Linux内核的最新版本支持以下时钟: CLOCK_REALTIME 系统范围的实时时钟。设置此时钟需要适当的权限。
CLOCK_MONOTONIC 无法设置的时钟,表示从某个未指定的起点开始的单调时间。
CLOCK_PROCESS_CPUTIME_ID 来自CPU的高分辨率每进程计时器。
CLOCK_THREAD_CPUTIME_ID 特定于线程的CPU时钟。
所以你可以试试 CLOCK_THREAD_CPUTIME_ID 。