2015-07-19 56 views
0

最好是否可以使用某個功能屬性來禁用某個功能的配置文件?我想這樣做是因爲我需要描述在程序的多線程部分中花費的時間。我不關心特定線程的細節,只是在整個批處理中花費的時間。禁用某些功能及其所有後代的配置文件

Timegraph:

    +--------------------------------+ 
        +--------------------------------+ 
---Main thread----+ Main thread waits for workers +----Main thread continues----- 
        +--------------------------------+ 
        +--------------------------------+ 
       t0        t1 

我想配置文件輸出正確測量T1-T0,並調用批處理的數量,但mcount不是線程安全的,因此,在並行運行的東西必須排除不知何故。

由於物理總線速度是主要問題,因此Valgrind不會去。

+0

即使gprof允許這樣做,它也不起作用,因爲gprof不會在等待線程中進行採樣。 OTOH,你可以在GDB下運行整個事情,並使用Ctrl-C和* bt *手動獲取堆棧樣本。這是[*這種技術*](http://stackoverflow.com/a/378024/23771)。顯示主線程等待工人的部分樣本是您想要的時間部分。爲了獲得通話的次數,你可以在代碼中添加一個計數器。 –

回答

0

我用最強大的C++特性}解決了它。在作用域的頂部,添加一個存儲當前時間的對象。讓它的析構函數再次讀取時間並採取差異。將輸出寫入文件。