【问题标题】:Posix message queue - multi writer & multi readerPosix 消息队列 - 多写入器和多读取器
【发布时间】:2011-12-12 20:54:56
【问题描述】:

我对队列 (POSIX) 感到困惑。 是否需要保护队列中的多个写入者或队列中的多个读取者?

多个线程将写入队列,多个线程将从队列中读取。

正如定义所说“一个消息队列可以有许多读者和许多作者”。但这并不是说它是否需要保护。 这两条消息应该被互斥锁保护吗?

mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);

请问有人可以帮我吗?提前致谢。

【问题讨论】:

    标签: posix message-queue


    【解决方案1】:

    不,您不需要使用互斥锁等来保护它们。内核会处理它。

    在线查看"ATTRIBUTES" section of the mq_send man page(“线程安全”为"MT-Safe")。

    【讨论】:

    • @Vincent - 从前我有一个引文,但现在找不到。如果您查看 man (7) pthreads,它有一个 posix 调用列表,这些调用不受线程安全和 mq_send/mq_receive 的限制,这两个 posix 调用都不在其中。
    • @Vincent - 从实际的角度来看,如果 MQ 不保护自己,它们将无法使用。别管线程,从流程的角度考虑。如果两个不同的进程都必须保护一个队列,则需要它们各自共享一个互斥锁或信号量,从而提前知道该实体。从来没有一个需要此类 AFAIK 的进程之间共享 msg 队列的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2017-02-09
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多