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

JNY*_*ger 5 c multithreading synchronization posix ipc

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

我读到了这个问题:消息队列是否支持多线程?这与SysV消息队列有关,我认为POSIX至少具有相同的支持.它似乎暗示是的,它们是线程安全的,但是:

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

这将使我相信仍然需要进程内同步.

在我的情况下,特别是使用消息队列进行通信的两个进程都实现了"boss-worker"模式,因此当尝试对消息队列执行操作时,worker可能会碰撞竞争条件.我的假设是否正确,说明对这些队列的访问仍然需要在每个进程内同步?

R..*_*R.. 5

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