任何人都可以告诉我,如果多线程程序在执行mq_send期间收到SIGSTOP信号会发生什么?
答案 0 :(得分:2)
mq_send
的手册页表明它是在mq_timedsend
之上实现的,这是Linux中的系统调用。系统调用通常是原子的,因为它们要么成功要么不成功。如果系统调用被信号中断,通常的行为是返回-1并将errno
设置为EINTR
。看起来mq_send
有这种行为。
基本上,您应检查EINTR
,如果以这种方式失败,请重试该呼叫。这对于可能会阻止recv
或select
的系统调用尤为重要,因为它们被中断的可能性更高。