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