根本不使用它们。实际上 POSIX 中允许sleep
使用的文本SIGALRM
与线程安全的要求相冲突sleep
,并且已经在 POSIX 的下一个版本中修复,但最好还是避免它。
代替sleep
,使用nanosleep
或clock_nanosleep
。
代替alarm
,取决于您想要做什么,您可以使用 POSIX 计时器或其他一些机制。但是,在超时后用信号中断卡住操作的整个习语alarm
不适用于多线程程序,因此实际上您应该放弃整个alarm
习语并为现代代码使用不同的方法。