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。处理器可以在StartComputing 调用之间切换到另一个线程,因此您将计算多个线程的时间。您需要为一个线程使用本地滴答计数器。

【讨论】:

你的意思是时钟会包括所有线程的运行时间吗?如果是这样,我想要的是为每个线程使用本地滴答计数器。您能否对刻度计数器进行更多解释? 是的,关于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_utimeru_stime。在开始和之后调用一次,您可以获得增量。

【讨论】:

以上是关于c++线程运行时间的主要内容,如果未能解决你的问题,请参考以下文章

c++线程异步同时运行

单个程序中的 10 个线程或 1 个线程程序运行 10 次(C++)?

增加线程数,但程序不能更快地运行 C++ OpenMP 选择排序

在虚拟机上运行的 C++ 多线程文件读取问题

在 C++ 中运行类成员函数的线程

C++ 从类的构造函数运行 boost 线程