gpt4 book ai didi

linux - `nanosleep()` Linux 上的异​​步信号安全

转载 作者:行者123 更新时间:2023-12-03 12:58:40 30 4
gpt4 key购买 nike

我需要使用 nanosleep我的用户空间线程库中的函数来实现大约所需数量的等待,因为它可以在异步信号中断的情况下节省剩余时间。我使用 SIGALRM 抢先切换线程;因此,重要的是要考虑使用不可重入函数可能带来的副作用。出于这个原因,万一nanosleep调用被线程切换中断,并从另一个线程或信号处理程序再次调用,我想知道这种情况是否会导致问题。

显然,nanosleep函数不是异步信号安全 as it is not listed here ;然而,sleep(3)据说是异步信号安全的。另一方面, sleep(3) seems to be implemented using nanosleep on Linux .我可以以此作为证明nanosleep对于我想要实现的目标是否安全?

编辑:根据 this resource ,它确实是AS-safe。

最佳答案

不,您不能安全地假设,除非它被特别记录。原因是使用 nanosleepsleep的实现细节.如果这两个函数被重构为使用 glibc 中的一些通用内部函数,这些函数是异步信号安全的,但 nanosleep的实现改变了,所以它不是,你的代码会被破坏。

您不能依赖 glibc 中函数的实现细节,因为它们可以并且确实会跨版本更改。值得注意的是,所有 Adob​​e Flash 版本在某些机器上都崩溃了,因为 glibc 更改了 memcpy向下复制而不是向上复制,这是标准和文档所允许的。

此外,仅仅因为 glibc 以某种方式做事并不意味着其他 Linux libcs​​(或其他非 Linux libcs​​)会这样做,并且您的代码在那里不起作用。

关于linux - `nanosleep()` Linux 上的异​​步信号安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61019614/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com