我不明白这些的用法:msleep
而且msleep_interruptible
......我知道一个是可中断的,另一个是不可中断的,但找不到我可以实际看到的某些用法。我尝试使用函数调用线程来 msleep 并打印说“你好!” 和 msleep(msleep_interruptible) 之后,但看不出有任何区别。任何人都可以帮助我吗,可以举个例子吗?
问问题
5148 次
1 回答
5
不同之处在于当一个信号(例如 SIGINT)被引发并且您为该信号设置一个信号处理程序时会发生什么。
msleep
回去睡觉msleep_interruptible
返回给调用者(非零值表示剩余的睡眠时间)。
可中断睡眠的示例:
$ perl -Mthreads -E'
my $stime=time;
async { sleep(3); kill INT => $$; }->detach();
$SIG{INT} = sub { warn "Got INT signal after ".(time-$stime)."\n"; };
sleep(5);
say time-$stime;
'
Got INT signal after 3
3
它睡了 3 秒而不是 5 秒,因为它被处理的信号打断了。另一个版本将打印以下内容:
Got INT signal after 3
5
换句话说,信号处理程序以任何一种方式被调用,但是即使有信号进来,一个版本也不会返回。
于 2012-06-18T21:49:55.327 回答