由于警报和睡眠都使用SIGALRM,因此可能存在冲突。
除了使用setitimer或timer_create等创建任何新计时器外,谁能建议我使用某种互斥或信号量机制保护警报和睡眠。
最佳答案
根本不使用它们。实际上,POSIX中允许sleep
使用SIGALRM
的文本与sleep
具有线程安全性的要求相冲突,并且已针对下一版本的POSIX进行了修复,但是仍然最好避免这种情况。
代替sleep
,使用nanosleep
或clock_nanosleep
。
代替alarm
,根据您要执行的操作,可以使用POSIX计时器或其他某种机制。但是,整个alarm
习惯用法会在超时后用信号中断卡住的操作,但不适用于多线程程序,因此,实际上,您应该删除整个alarm
习惯用法,并对现代代码使用其他方法。
关于c - 通过某种互斥或信号量机制保护警报和 sleep ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19037611/