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

Single Process Thread Safety Using POSIX Message Queues

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

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

"Any resource which is shared globally among threads or processes is subject to race conditions"

这让我相信进程内同步仍然是必需的。

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

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