sleep(n)的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。
而如果n=0,sleep(0)是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。
那麼,sleep(0)應該在那種情況下使用? 一般來說,如果當前執行緒比較耗時比較佔cpu資源,可以在結尾處加上sleep(0), 這樣效率會得到大大的提高。
void
setcopyfile(short
progress)
}如上**,由於該**處於乙個多執行緒執行的環境中,而拷貝progress又是不停的進行,不斷地呼叫postmessage()函式,同時還要做訊息對映,執行訊息相應函式等等,因此這是乙個比較耗時的過程,此時,sleep(0)就派上用場了,
加在後面,讓其他執行緒也能及時得到執行。
sleep(0)
以前在同乙個程序裡,特別鍾愛用sleep(0)來做一些情況下的執行緒同步。譬如當線城池工作時,主線程使用sleep(0)來等待執行緒池裡所有的執行緒都
運作的很好,可以說完全在我的控制之內。
然而在我換上了雙核cpu後,問題出來了:sleep(0)經常會比預期中更早返回。當初的設計**根本沒有考慮過多核/多cpu方式下的執行緒排程。
看來,速度和方便,還是難以兩全其美。如果資料對同步敏感,還是不能偷工減料。
另外,在測試中發現非常奇怪的一點: 當執行緒池工作的時候,在任務管理器裡設定該程序只能在乙個cpu上執行的時候,該進城所占用的記憶體量急劇持續增長。而再設回允許在雙核下排程時,記憶體量又開始緩慢持續減少
Sleep 0 及其使用場景
sleep n 的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。而如果n 0,sleep 0 是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。那麼,sleep 0 應該在那種情況下使用?一...
Sleep 0 及其使用場景
sleep n 的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。而如果n 0,sleep 0 是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。那麼,sleep 0 應該在那種情況下使用?一...
Sleep 0 及其使用場景
sleep n 的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。而如果n 0,sleep 0 是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。那麼,sleep 0 應該在那種情況下使用?一...