【问题标题】:Is mq_send atomic?mq_send 是原子的吗?
【发布时间】:2010-12-11 08:20:27
【问题描述】:

如果多线程程序在执行 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)和它似乎是原子的,但我不是 100% 确定。如果有人知道确切的答案或知道 mq_send 的工作原理,很高兴与我们分享信息:)

标签: linux multithreading signals real-time


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2020-05-07
    • 2013-01-26
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多