使用POSIX消息队列实现单进程线程安全

5
我知道 POSIX 消息队列不需要在不同进程之间进行同步。但是,如果在单个进程中被多个线程访问,它们的安全性如何呢?
我看到了这个问题:Does message queue support Multi-thread? 它与 SysV 消息队列相关,并且我认为 POSIX 至少具有相同的支持。它似乎暗示着它们是线程安全的,但是:
“任何在线程或进程之间共享的资源都可能受到竞争条件的影响。”
这表明仍然需要在进程内进行同步。
特别地,在我的情况下,使用消息队列通信的两个进程都实现了“boss-worker”模式,因此当工作线程尝试对消息队列执行操作时,可能会出现竞争条件。因此,我的假设是,在每个进程内访问这些队列仍然需要同步。
1个回答

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

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