2

由于警报和睡眠都使用 SIGALRM,因此可能存在冲突。除了使用 setitimer 或 timer_create 等创建任何新计时器之外,任何人都可以建议我使用某种互斥锁或信号量机制来保护警报和睡眠吗?

4

1 回答 1

2

根本不使用它们。实际上 POSIX 中允许sleep使用的文本SIGALRM与线程安全的要求相冲突sleep,并且已经在 POSIX 的下一个版本中修复,但最好还是避免它。

代替sleep,使用nanosleepclock_nanosleep

代替alarm,取决于您想要做什么,您可以使用 POSIX 计时器或其他一些机制。但是,在超时后用信号中断卡住操作的整个习语alarm不适用于多线程程序,因此实际上您应该放弃整个alarm习语并为现代代码使用不同的方法。

于 2013-09-26T20:06:17.077 回答