我的问题很简单。如果我使用std::this_thread::sleep_for(0ms),线程会休眠吗?
我知道这似乎是一个愚蠢的问题,但当我告诉一个线程休眠一小段时间(例如10微秒)时,它通常会休眠至少5-10毫秒。我知道这与操作系统如何调度它们的进程有关。我只想知道所有的转角案例是如何工作的,因为我有一些代码可能会因为睡眠时间很短、零或负数而变慢。
编辑1:我已经将问题简化为零秒睡眠。
编辑2:到目前为止,许多评论都是关于我不应该尝试这样做,但我都有理由,而且我很好奇。在我的代码中,我并没有直接调用std::this_thread::sleep_for(0ms),而是根据外部条件休眠了一段可变的时间。当我计算我需要睡眠的时间时,结果可以是正的、负的或零。我想知道我是否仍在等待小于或等于零的结果。
发布于 2019-09-07 07:11:10
我在典型平台上观察到的最常见的行为是,它的行为就像一个自愿的收益操作。也就是说,它不会执行任何操作,除非存在当前未调度的另一个准备运行的线程,在这种情况下,它将让位于该线程。
对于平台如何处理这种情况,没有具体的要求。把它当做“无人操作”是完全合理的。将其视为平台所能支持的最短睡眠也是完全合理的。
https://stackoverflow.com/questions/57826600
复制相似问题