2013-11-28 97 views
-1

我使用boost編寫了一個C++程序。 我的計劃是這樣的:在多線程C++程序密集計算期間凍結(boost)

int main(int argc, char ** argv) 
{ 
boost::thread workerThread(worker) 
// Waiting end of calculation... 
workerThread.join(); 
return 0; 
} 

void worker() 
{ 
// Ultra intensive calculation here. Big loop on big vectors, ... 
} 

在一些「小」微性,它的確定,程序返回了良好的效果。 但是,如果我增加輸入,程序開始凍結計算機。 (雖然他返回了好的結果)。 我以爲使用多線程可以解決這個問題,但顯然不是..

你覺得呢?是否有可能減少工作線程使用的內存,以允許用戶繼續使用他的計算機? 我試圖找到我的calcul代碼中的一些錯誤,但現在沒有找到。

+0

添加線程不會解凍計算機。不知道你爲什麼這麼想。如果你詳細說明,我會解釋爲什麼不是這樣。 – usr

+0

爲什麼你期望你的程序*不使用它可以得到的CPU時間?你有沒有編寫任何說「好吧,我最好什麼都不做」的代碼?如果沒有,那麼你的程序將在所有的CPU時間內工作。 – jalf

+1

如果您的工作人員使用循環/重複操作,請每次都添加臨時性指令(sleep(5ms))以便執行 - 這可能是因爲您的編譯器沒有針對上下文切換優化密集計算如深度遞歸調用)。這意味着在工作人員運行和系統凍結時沒有上下文切換。 – utnapistim

回答

2

join()將阻塞,直到線程中的工作完成,如果您正確顯示的代碼描述了您的方案,那麼在此之前程序不能自然返回。

你並沒有真正做任何事情 - 你只需啓動一個額外的線程來完成整個事情,然後等待線程完成。

正如我在評論中提到的那樣,通過使用您的CPU非常不可能減慢系統速度。我認爲你只是吞噬了太多的內存,而操作系統正在忙於分頁 - 但除非你詳細說明,否則我無法進一步提供幫助。

+0

哦,是的,這是真的。事實上,我將在稍後並行處理我的代碼。我只想在程序運行時不凍結我的電腦。你知道一個辦法嗎?也許一種方法來限制CPU使用率? – user3046300

+1

我不知道你在做什麼,操作系統應該公平地分配時間片,也許你正在咀嚼內存,最終會發生分頁顛簸而不是真的讓CPU忙碌。 – ScarletAmaranth