【发布时间】:2015-06-04 00:09:15
【问题描述】:
我有一个 Linux C 程序,我在其中在线程之间传递数据。我正在研究使用 POSIX 消息队列来解决这个问题,因为它们不需要互斥体/锁。
查看 mq_open() 调用,我必须指定权限和队列路径。这引出了两个问题。
- 是否有众所周知的指定文件路径的约定?我曾是 只是将队列转储到与可执行文件相同的文件夹中。
- 在权限方面,我打算使用 0600,但我想进一步限制它以防止其他进程访问队列(我在线程之间而不是进程之间共享数据)。鉴于队列“只是”一个文件,我可以使用带有 LOCK_EX 的flock() 来防止其他进程的访问吗?
提前致谢。
【问题讨论】:
-
由于您使用线程,它们共享相同的地址空间。 (这是使用线程的全部意义所在。)为什么不使用例如一块内存或一个链表受互斥体保护来交换数据?
-
有很多生产者-消费者以先进先出的方式进行。所以虽然,是的,我可以创建一个 FIFO 缓冲区并使用互斥锁对其进行管理,但我觉得消息队列中已经有很大一部分功能可用。
标签: c linux posix message-queue