【问题标题】:What is the best IPC technique which can guarantee mutual exclusion in perl?在perl中可以保证互斥的最佳IPC技术是什么?
【发布时间】:2014-06-27 00:02:34
【问题描述】:

我正在做一个项目,我需要在父进程和子进程之间建立通信,我正在为 IPC 使用命名管道,但我听说命名管道不能保证互斥。 可以保证互斥的最佳 IPC 技术是什么?

【问题讨论】:

  • 你能更详细地描述问题吗?
  • 实际上父进程正在子进程之间分配工作,每个子进程从数据库表中选择一行并对其执行一些操作。不幸的是,孩子很难知道其他孩子已经占据了哪一排。我应该使用什么技巧让每个孩子选择不同的行??
  • 嗨@mpapec,你有我的问题吗??
  • 我会改变方法并告诉每个孩子选择哪一行。

标签: perl process ipc named-pipes mutual-exclusion


【解决方案1】:

如果您想要互斥,您可以将命名管道与flock/fcntl 结合使用,但这仅在读取器(最好)或写入器端是单数(具有多个客户端的端将使用锁)。

【讨论】:

  • 读写器端都是非奇异的。有没有其他的 IPC 技术可以在这里使用??
【解决方案2】:

您想要的是一个带有数据报 (SOCK_DGRAM) 的 Unix 域套接字 (AF_UNIX) 而不是流(这有点像可靠的本地 UDP)。这样您就可以多路复用发送和接收,而无需求助于锁定。

另一种选择是使用消息队列,但现在这被认为有点晦涩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多