【问题标题】:Single Process Thread Safety Using POSIX Message Queues使用 POSIX 消息队列的单进程线程安全
【发布时间】:2015-06-02 15:23:22
【问题描述】:

我了解 POSIX 消息队列不需要不同进程之间的同步。但是,当在单个进程中被多个线程访问时,它们的安全性如何?

我读到了这个问题:Does message queue support Multi-thread?,它与 SysV 消息队列有关,我认为 POSIX 至少具有相同的支持。然而,这似乎暗示它们是线程安全的:

“在线程或进程之间全局共享的任何资源都受到竞争条件的影响”

这会让我相信仍然需要进程内同步。

在我的例子中,特别是使用消息队列进行通信的两个进程都实现了“boss-worker”模式,因此工作人员在尝试对消息队列执行操作时可能会发生争用情况。我的假设是否正确,即访问这些队列仍需要在每个进程中进行同步?

【问题讨论】:

    标签: c multithreading synchronization posix ipc


    【解决方案1】:

    如果您将共享内存的内存地址(进程中的线程之间,或进程之间共享的内存)作为消息的内容传递,那么您仍然需要内存同步才能访问一旦你从消息中读出它的地址,那个记忆。但是您不需要任何额外的同步来对消息队列本身执行操作(除了销毁它,当然,在最后一个用户完成它之前您不应该这样做)。这就是拥有消息队列的全部意义所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-12
      • 2020-06-11
      • 2019-08-21
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      相关资源
      最近更新 更多