在linux上,我有一個安裝程序,在其中產生了一個使用SIGPROF信號爲採樣分析器啓動其父線程的分析器線程。我明確發送信號,而不是依賴setitimer來獲得更好的控制。我可能需要重新考慮這一點,但現在假設我自己發送信號。只有當線程正在運行時才發送信號給線程
我的問題是,它始終發送信號,即使被配置線程正在系統調用中休眠。這樣,我的樣品環緩衝液就會出現不足。
是否有某種方法可以檢測配置線程的運行狀態,即使它在檢查後可能會立即發生變化?或者更好的是,發送一個信號,使目標處於運行狀態?
我可以排序的假貨通過原子遞增的異形線的信號處理程序計數器,並檢查它是否是一個從探查線程改變:
volatile int samples; while(1) { int old_samples = samples; pthread_kill(profiled_thread, SIGPROF); while (samples == old_samples) usleep(appropriate amount); }
或東西,但我不知道是否有一個更好的辦法。 (上面的代碼簡化了延遲計算,因爲實際上整個點都是無偏樣本,但現在忽略)。