mq_send原子?

时间:2009-10-29 17:31:12

标签: linux multithreading signals real-time

任何人都可以告诉我,如果多线程程序在执行mq_send期间收到SIGSTOP信号会发生什么?

1 个答案:

答案 0 :(得分:2)

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

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