- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用 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。
最佳答案
不,您不能安全地假设,除非它被特别记录。原因是使用 nanosleep
是sleep
的实现细节.如果这两个函数被重构为使用 glibc 中的一些通用内部函数,这些函数是异步信号安全的,但 nanosleep
的实现改变了,所以它不是,你的代码会被破坏。
您不能依赖 glibc 中函数的实现细节,因为它们可以并且确实会跨版本更改。值得注意的是,所有 Adobe Flash 版本在某些机器上都崩溃了,因为 glibc 更改了 memcpy
向下复制而不是向上复制,这是标准和文档所允许的。
此外,仅仅因为 glibc 以某种方式做事并不意味着其他 Linux libcs(或其他非 Linux libcs)会这样做,并且您的代码在那里不起作用。
关于linux - `nanosleep()` Linux 上的异步信号安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61019614/
我是一名优秀的程序员,十分优秀!