std::this_thread::sleep_for - 上下文切换到这个线程吗?

Posted

技术标签:

【中文标题】std::this_thread::sleep_for - 上下文切换到这个线程吗?【英文标题】:std::this_thread::sleep_for - is context switch to this thread? 【发布时间】:2016-10-11 13:13:38 【问题描述】:

如果我调用我的主函数 std::this_thread::sleep_for(std::chrono::seconds(1)) 并创建 2 个线程(使用 std::thread)并且我有 1 个 cpu 内核。

在此期间是否有任何上下文切换到主线程?或者可能只有 1 秒后才会有上下文切换到主线程?

我不知道它是如何工作的......我认为有两种可能性:

1) 系统多次切换到主上下文,然后检查时间是否结束并切换,什么也不做并切换到另一个线程 2)有系统中断,时间结束时切换上下文

【问题讨论】:

如果您的线程正在休眠,那么您的操作系统没有理由为该线程安排时间片,所以没有。 这很可能取决于实现,另请参阅this question。 【参考方案1】:

AFAIK 这取决于操作系统的调度程序实现。但是现在的现代操作系统足够聪明,可以将明确请求临时挂起的线程放在不同的队列中,这样就不会被安排占用 CPU。 所以,

这段时间是否有上下文切换到主线程?

没有。

或者可能只有在 1 秒后才会有上下文切换到 main 线程?

是的,在 1 秒或更长时间之后。

【讨论】:

以上是关于std::this_thread::sleep_for - 上下文切换到这个线程吗?的主要内容,如果未能解决你的问题,请参考以下文章