2010-04-29 107 views
0

我想知道我是否可以計算每個線程的運行時間。 我使用pthread在C++中實現多線程程序。我們知道,每個線程都會與CPU競爭。 我可以使用clock()函數來計算每個線程消耗的CPU時鐘的實際數量嗎?C++線程運行時間

我的程序是這樣的:

Class Thread() 
{ 
Start(); 
Run(); 
Computing(); 
}; 

的start()是啓動多個線程。然後每個線程都會運行計算功能來做一些事情。我的問題是我如何計算每個線程的運行時間以用於計算功能

+0

您是否需要在程序中始終進行此測量並使用測量的數字?或者這是爲了調試目的? 如果對其進行調試,許多工具都可以幫助您解決問題。讓我們知道您正在編碼的平臺以及您使用的IDE,並且我們可能會提供幫助:-) – Fuzz 2010-04-29 05:00:09

+0

沒錯。如果你所要問的原因是你想找出需要改變的地方,以便儘量減少總體執行時間,那麼在SO上找到了很好的答案。 – 2010-04-29 12:25:57

回答

2

不,您不能使用clock。處理器可以切換到StartComputing調用之間的另一個線程,以便計算幾個線程的時間。您需要爲一個線程使用局部滴答計數器。

+0

你的意思是時鐘會包含所有線程的運行時間嗎?如果是這樣,我想要使用每個線程的本地計數器計數器。你能否爲滴答櫃檯提供更多解釋? – chnet 2010-04-29 05:03:29

+0

是關於「時鐘」。但是線程本地計數器是一個平臺特定的功能,您使用的是什麼平臺? – 2010-04-29 05:05:25

+0

i686-apple-darwin9-g ++ - 4.0.1 – chnet 2010-04-29 05:06:34

1

你在使用什麼平臺?如果您使用的是Linux,並在內核> 2.6.26可以使用RUSAGE_THREAD標誌getrusage

struct rusage usage 
getrusage(RUSAGE_THREAD, &usage); 

struct rusage,你會發現ru_utimeru_stime分別跟蹤用戶時間和系統時間。在開始時調用一次,然後一次,你可以得到三角洲。

1

根據clock_gettime(3)

GNU libc中的足夠新版本和Linux內核支持下列時鐘: CLOCK_REALTIME 全系統實時時鐘。設置這個時鐘需要適當的權限。

CLOCK_MONOTONIC 無法設置的時鐘,表示從某個未指定起點開始的單調時間。

CLOCK_PROCESS_CPUTIME_ID 來自CPU的高分辨率每進程計時器。

CLOCK_THREAD_CPUTIME_ID 線程特定的CPU時鐘。

所以你可能有CLOCK_THREAD_CPUTIME_ID試一試。