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 - 上下文切换到这个线程吗?的主要内容,如果未能解决你的问题,请参考以下文章