【问题标题】:lock or not with message queue使用消息队列锁定与否
【发布时间】:2012-05-16 06:33:10
【问题描述】:

我正在尝试在 Linux 中使用消息队列,是否可以执行以下操作

进程 1 有一个名为 1 的消息队列

生产者 1 和 2 向没有锁定机制的生产者发送消息,可以吗?

【问题讨论】:

  • 一般来说,这取决于您所说的“锁定”和“队列”的含义。严格来说,可以使用 CPU 原子指令来代替 OS 提供的自旋锁或线程同步原语。
  • 我的意思是 System V 或 POSIX 消息队列
  • 通过锁定,比如说 emaphore

标签: c linux message-queue


【解决方案1】:

Sys V 消息队列提供优先级,因此可以指定特定的队列接收者并且可以“针对”接收消息。毫无争议。队列读取器也可以根据msgrcv() 中的 mtype 值访问任何消息。 POSIX 消息队列有点不同。通常,您可以使用 Sys V 队列而不必担心锁定资源。 Sys V 信号量队列和共享内存也有一些缺点。就像它们是内核持久的事实一样。

试试http://beej.us/guide/bgipc/

【讨论】:

  • 谢谢 Jim,我想我也不需要锁定 POSIX 队列,请检查此链接,如果我错了,请告诉我。 mij.oltrelinux.com/devel/unixprg/#ipc__sockets
  • 您的链接,正如我所读,不是 POSIX 消息队列,而是套接字。您也可以围绕 POSIX 队列上的资源控制需求进行编码。只是在 IMO Sys V 上实现起来更简单。
  • POSIX 消息队列也是内核持久的。请参阅(持久性)下的 man mq_overview:POSIX 消息队列具有内核持久性:如果不被 mq_unlink(3) 删除,则消息队列将一直存在,直到系统关闭。
猜你喜欢
  • 2012-06-10
  • 1970-01-01
  • 2013-12-15
  • 2012-03-23
  • 2018-06-30
  • 2013-08-24
  • 2020-11-27
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多