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

最佳答案

根本不使用它们。实际上,POSIX中允许sleep使用SIGALRM的文本与sleep具有线程安全性的要求相冲突,并且已针对下一版本的POSIX进行了修复,但是仍然最好避免这种情况。

代替sleep,使用nanosleepclock_nanosleep

代替alarm,根据您要执行的操作,可以使用POSIX计时器或其他某种机制。但是,整个alarm习惯用法会在超时后用信号中断卡住的操作,但不适用于多线程程序,因此,实际上,您应该删除整个alarm习惯用法,并对现代代码使用其他方法。

关于c - 通过某种互斥或信号量机制保护警报和 sleep ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19037611/

10-10 15:36