可移植且可中断的等待线程

时间:2019-12-22 13:56:25

标签: c++ c++11

问题

我正在尝试使用一种简单的可移植方式为线程执行可中断的睡眠。我的另一个要求是关于SIGSTOP / SIGCONT的使用,如果程序被暂停,则等待必须在不考虑暂停的情况下执行。示例:我正在等待5秒钟,在暂停程序1秒钟后,在恢复1分钟1分之后,等待应再次运行,等待4秒钟。

我的analisys

std::condition_variable::wait_for()std::condition_variable::wait_until()方法仅从gcc 10和glibc 2.6 bugzilla开始使用单音时间。在以前的版本或没有平台支持的地方,即pthread_cond_clockwait()不可用,将使用系统时钟。但是,如果通过人工或自动(例如NTP)更改系统时钟,则使用系统时钟可能会产生超时等过早或过晚的副作用。另外,如果我们通过wait_for()停止进程,则wait_until()SIGSTOP可能触发得太早,因为系统时钟或稳定时钟被重新评估,并且由于整个时间都在运行,但是我们的过程冻结,当我们使用SIGCONT重新开始该过程时,每次等待都会触发。

可能的解决方案

即使在较旧的平台上,似乎也只有一种可靠的睡眠方式可以调用select系统调用。另外,选择行为可以满足我的要求,例如可以使用自管技巧将其中断。

问题

我的分析正确吗?我想念什么吗?

0 个答案:

没有答案