c++线程运行时间
Posted
技术标签:
【中文标题】c++线程运行时间【英文标题】:c++ thread running time 【发布时间】:2010-04-29 04:56:10 【问题描述】:我想知道我是否可以计算每个线程的运行时间。 我使用 pthread 在 C++ 中实现了一个多线程程序。 众所周知,每个线程都会竞争 CPU。 我可以使用clock()函数计算每个线程实际消耗的CPU时钟数吗?
我的程序如下:
Class Thread ()
Start();
Run();
Computing();
;
Start() 是启动多个线程。然后每个线程都会运行 Computing 函数来做一些事情。我的问题是如何计算计算函数的每个线程的运行时间
【问题讨论】:
是否需要在程序中一直做这个测量并使用测量的数字?还是出于调试目的?如果它用于调试,则有许多工具可以帮助您。让我们知道您正在编写什么平台以及您使用什么 IDE,我们可能会提供帮助:-) 对。如果您问的原因是您想找出要更改的内容以最小化整体执行时间,那么可以在 SO 上找到很好的答案。 【参考方案1】:不,您不能使用clock
。处理器可以在Start
和Computing
调用之间切换到另一个线程,因此您将计算多个线程的时间。您需要为一个线程使用本地滴答计数器。
【讨论】:
你的意思是时钟会包括所有线程的运行时间吗?如果是这样,我想要的是为每个线程使用本地滴答计数器。您能否对刻度计数器进行更多解释? 是的,关于clock
。但是线程本地计数器是特定于平台的功能,您使用什么平台?
抱歉,无法咨询苹果。【参考方案2】:
根据clock_gettime(3):
最新版本的 GNU libc 和 Linux 内核支持以下时钟: CLOCK_REALTIME 系统范围的实时时钟。设置此时钟需要适当的权限。
CLOCK_MONOTONIC 无法设置的时钟,表示自某个未指定起点以来的单调时间。
CLOCK_PROCESS_CPUTIME_ID 来自 CPU 的高分辨率每进程计时器。
CLOCK_THREAD_CPUTIME_ID 线程特定的 CPU 时间时钟。
所以你可以尝试一下CLOCK_THREAD_CPUTIME_ID。
【讨论】:
【参考方案3】:您使用的是什么平台?如果您使用的是 Linux 并且内核 > 2.6.26,您可以使用 RUSAGE_THREAD
标志到 getrusage
:
struct rusage usage
getrusage(RUSAGE_THREAD, &usage);
在struct rusage
中,您会找到分别跟踪用户时间和系统时间的ru_utime
和ru_stime
。在开始和之后调用一次,您可以获得增量。
【讨论】:
以上是关于c++线程运行时间的主要内容,如果未能解决你的问题,请参考以下文章
单个程序中的 10 个线程或 1 个线程程序运行 10 次(C++)?