2016-10-11 47 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秒后或更多。

相关问题