我使用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代碼中的一些錯誤,但現在沒有找到。
添加線程不會解凍計算機。不知道你爲什麼這麼想。如果你詳細說明,我會解釋爲什麼不是這樣。 – usr
爲什麼你期望你的程序*不使用它可以得到的CPU時間?你有沒有編寫任何說「好吧,我最好什麼都不做」的代碼?如果沒有,那麼你的程序將在所有的CPU時間內工作。 – jalf
如果您的工作人員使用循環/重複操作,請每次都添加臨時性指令(sleep(5ms))以便執行 - 這可能是因爲您的編譯器沒有針對上下文切換優化密集計算如深度遞歸調用)。這意味着在工作人員運行和系統凍結時沒有上下文切換。 – utnapistim