mq_send是原子的吗?

4

请问如果多线程程序在执行 mq_send 时收到 SIGSTOP 信号会发生什么?


所以,我在我的Linux机器上进行了一些测试(Linux home 2.6.31-11-generic #38-Ubuntu SMP Fri Oct 2 11:06:40 UTC 2009 x86_64 GNU/Linux),它似乎是原子性的,但我不确定百分之百。如果有人知道确切答案或知道mq_send的工作原理,与我们分享信息会很好 :) - iddqd
1个回答

2
mq_send的man页面指出它是在Linux上实现的,基于mq_timedsend系统调用。系统调用通常是原子性的,即它们要么成功,要么失败。如果系统调用被信号打断,则通常会返回-1并设置errnoEINTR。看起来mq_send也有这个行为。
基本上,您应该检查EINTR,如果以这种方式失败,则重试调用。对于可能阻塞的系统调用(例如recvselect),这一点尤其重要,因为它们更有可能被中断。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接