2016-10-11 45 views
0

如果我打電話給我的主要功能std::this_thread::sleep_for(std::chrono::seconds(1)),我創建了2個線程(使用std::thread),我有1個cpu核心。std :: this_thread :: sleep_for - 是否將上下文切換到此線程?

在此期間是否有任何上下文切換到主線程?或者也許只有1秒後會有上下文切換到主線程?

我不知道它是如何工作......我認爲有兩種可能:

1)系統多次切換到主背景下,檢查後時間不超過和交換機,什麼都不做切換到另一個線程 2)系統中斷,當時間結束時切換上下文

+0

如果你的線程正在休眠,你的操作系統沒有理由爲該線程調度時間片,所以沒有。 –

+0

這是最有可能的實現依賴,請參見[此問題](http://stackoverflow.com/questions/17325888/c11-thread-waiting-behaviour-stdthis-threadyield-vs-stdthis-thread)。 –

回答

0

AFAIK它取決於OS的調度程序實現。但是現在的操作系統現在已經足夠聰明,可以將明確要求臨時暫停的線程放入不同的隊列中,這樣它就不會被安排佔用CPU。
所以,

在這段時間內是否有任何上下文切換到主線程?

或者,也許只有1秒後會出現上下文切換到主 線程?

是的,1秒後或更多。

相關問題