【问题标题】:std::this_thread::sleep_for - is context switch to this thread?std::this_thread::sleep_for - 上下文切换到这个线程吗?
【发布时间】: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

标签: c++ multithreading c++11 stdthread


【解决方案1】:

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

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

没有。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2016-08-31
    • 2021-12-25
    • 2020-10-07
    相关资源
    最近更新 更多