4

谁能告诉我如果多线程程序在执行 mq_send 期间收到 SIGSTOP 信号会发生什么?

4

1 回答 1

2

的手册页表明它是在 Linux 中的系统调用mq_send之上实现的。mq_timedsend系统调用通常是原子的,因为它们要么成功,要么不成功。如果系统调用被信号中断,通常的行为是返回 -1 并设置errnoEINTR。看起来mq_send有这种行为。

基本上,您应该检查EINTR,如果以这种方式失败,则重试呼叫。这对于可能阻塞 like recvor的系统调用尤其重要select,因为它们被中断的可能性更高。

于 2009-10-29T23:10:53.323 回答