由于警报和睡眠均使用SIGALRM,因此可能存在冲突。 除了使用setitimer或timer_create等创建任何新的计时器之外,任何人都可以建议我使用某种互斥或信号量机制来保护警报和睡眠。
答案 0 :(得分:2)
只是不要使用它们。实际上,POSIX中允许sleep
使用SIGALRM
的文本与sleep
是线程安全的要求相冲突,并且已针对下一版本的POSIX进行了修复,但它仍然存在最好避免它。
代替sleep
,使用nanosleep
或clock_nanosleep
。
取代alarm
,取决于您想要做什么,您可以使用POSIX计时器或其他一些机制。然而,alarm
用于在超时后用信号中断卡住操作的整个习惯用法对多线程程序不起作用,所以你应该放弃整个alarm
成语并使用不同的现代法典的方法。