在C ++ 11中是否为信号中断(或信号处理程序)定义了std :: this_thread :: sleep_for行为?

时间:2018-10-18 07:08:00

标签: c++ linux

sleep()unistd.h的行为在Linux http://man7.org/linux/man-pages/man3/sleep.3.html中得到了很好的定义。

问题:

  1. C ++ 11标准是否为信号中断/信号处理程序定义了std::this_thread::sleep_for的行为? 如果是,则行为平台是否相关? (我希望不是)

  2. 在Linux中实现不可互斥的sleep()的最佳方法是什么?根据我的知识,可以通过在调用sleep()之前阻塞所有信号来完成此操作。

1 个答案:

答案 0 :(得分:2)

  

C ++ 11标准是否为信号中断/信号处理程序定义了std :: this_thread :: sleep_for的行为?

否。

  

行为平台依赖吗?

由于未指定,因此可以。

我在linux上进行了测试,并且有信号确实过早中断了睡眠。

  

在Linux中实现不可互斥的sleep()的最佳方法是什么?

最佳做法是不需要不间断的sleepsleep返回中断时的睡眠时间,因此,为了防止过早唤醒,您可以使用循环简单地在中断后恢复睡眠:

int time = 10;
while(time = sleep(time));

不幸的是,this_thread::sleep_for并非如此,它不会返回中断后剩余的时间。