我了解 POSIX 消息队列不需要不同进程之间的同步。但是,当它们被单个进程中的多个线程访问时,它们的安全性如何?
我读了这个问题:Does message queue support Multi-thread?这与 SysV 消息队列有关,我认为 POSIX 至少具有相同的支持。这似乎暗示是的,它们是线程安全的,但是:
"Any resource which is shared globally among threads or processes is subject to race conditions"
这让我相信进程内同步仍然是必需的。
在我的例子中,特别是使用消息队列进行通信的两个进程都实现了“老板-工作人员”模式,因此工作人员在尝试对消息队列执行操作时可能会发生冲突进入竞争条件。在声明访问这些队列仍然需要在每个进程内进行同步时,我的假设是否正确?
最佳答案
如果您将共享内存的内存地址(在进程中的线程之间,或在进程之间共享的内存)作为消息的内容传递,那么您仍然需要内存同步才能访问一旦您从消息中读取了它的地址,该内存就会被删除。但是您不需要任何额外的同步来对消息队列本身执行操作(除了销毁它,当然,在最后一个用户完成它之前您不应该这样做)。这就是消息队列的全部意义所在。
关于c - 使用 POSIX 消息队列的单进程线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332195/