2011-05-18 45 views
0

我需要檢測給定線程當前是否調度到CPU。我正在使用pthreads的Linux系統上。假設我的代碼運行在一個信號處理程序上,並且我知道在我的應用程序中有線程X和Y,並且在我的信號處理程序中,我想檢查X和Y當前是否預定。在Linux上檢測預定線程

感謝您的幫助。

+0

你想做什麼?檢查一個線程是否正在運行,甚至可以運行,這些信息會使你的信息變得過時。 – Mat 2011-05-18 23:01:25

+0

我想要做的是在問題中解釋。 – 2011-05-18 23:09:10

回答

3

一般情況下,如果你不得不問這個問題,你可能會錯誤地思考。無論你將得到什麼答案都會立即過時,無論你打算如何處理答案,都將面臨巨大的競爭條件。

然而,理論上你可以看看/ proc/getpid()/ task/threadid/status並找出一個特定的線程是否正在運行。注意這是一個非常linux的東西,「threadid」和pthread_self()的返回代碼或pthread_create的pthread_t copy-out之間的任何映射都不是標準。

+0

謝謝,實際上我剛回來報告說/ proc有我想要的,你打敗了我。但是,我不讚賞你的「錯誤地思考」評論。我正在研究一個不僅僅是linux的系統,而且它只能用於特定的發行版。我也不在意比賽條件(這是我想要做的一件統計事情) – 2011-05-18 23:07:08

+0

@bugur:你應該看一下'perf sched'工具 - 這是分析線程調度行爲的好方法。 – caf 2011-05-19 05:52:51

+0

@caf:謝謝,這很有趣。我有一個更特殊的用例。我正在跟蹤一些線程,並試圖找出他們在處理的每個「階段」花費多少時間。每個線程跟蹤其當前階段。各階段之間的傳輸可能會非常快速地發生,或者由於阻塞代碼路徑而非常緩慢。現在,我可以分析每個階段花費多少時間。問題是,我無法區分阻塞與實際工作。 – 2011-05-19 15:06:17