2016-10-11 24 views
0

私の主な機能はstd::this_thread::sleep_for(std::chrono::seconds(1))で、2つのスレッドを作成して(std::threadを使用)、1つのCPUコアを持っています。std :: this_thread :: sleep_for - このスレッドへのコンテキスト切り替えですか?

この間にメインスレッドに切り替わるコンテキストはありますか?あるいは、1秒後にメインスレッドへのコンテキスト切り替えが行われるでしょうか?私はそれがどのように動作するか分からない

...私は2つの可能性があると思う:

1)システムの何倍ものスイッチメインコンテキストに、それは時間がオーバーとスイッチではないことを確認した後、何もしませんし、別のスレッドに切り替えます 2)時間が経過するとコンテキストを切り替えるシステム割り込みがあります

+0

スレッドがスリープしている場合は、OSがそのスレッドのタイムスライスをschedueleする必要はありません。 –

+0

これは実装に依存する可能性が最も高いです。[この質問](http://stackoverflow.com/questions/17325888/c11-thread-waiting-behaviour-stdthis-threadyield-vs-stdthis-thread)も参照してください。 –

答えて

0

AFAIKこれはOSのスケジューラの実装に依存します。しかし現代のオペレーティングシステムは、現在、CPUを使用する予定がないように、一時的な中断を明示的に要求したスレッドを別のキューに入れるのに巧妙です。
したがって、

この間にメインスレッドに切り替えるコンテキストはありますか?

それとも唯一の1秒後にメイン スレッドへのコンテキストスイッチがあるでしょうか?

はい、1秒以上経過しています。

関連する問題