据我所知,POSIX消息队列不需要在不同进程之间进行同步。但是,在单个进程中被多个线程访问时它们有多安全?
我读到了这个问题:Does message queue support Multi-thread?与SysV消息队列有关,我认为POSIX至少具有相同的支持。它似乎暗示是的,它们是线程安全的,但是:
"线程或进程之间全局共享的任何资源都受竞争条件的影响"
这会让我相信仍然需要进程内同步。
在我的情况下,特别是使用消息队列进行通信的两个进程都实现了“老板 - 工作者”。模式,因此当尝试对消息队列执行操作时,工作人员可能会碰撞竞争条件。我的假设是正确的,说明对这些队列的访问仍需要在每个进程中进行同步吗?
答案 0 :(得分:5)
如果您将共享内存的内存地址(在进程中的线程之间或进程之间共享的内存)作为消息的内容传递,那么您仍需要内存同步来访问一旦你从消息中读出它的地址,那就是那个记忆。但是你不需要任何额外的同步来对消息队列本身执行操作(除了破坏它,当然,在最后一个用户完成它之前你不应该这样做)。这就是拥有消息队列的重点。