【问题标题】:Creating unique keys for a message quene for an app that can have multiple instances为可以具有多个实例的应用程序的消息队列创建唯一键
【发布时间】:2010-10-13 18:41:55
【问题描述】:

我制作了一个 Linux CUI 应用程序,它通过 Message-quene 在进程之间进行通信。

只要是单实例就没有问题。但是,当同一个应用有多个实例时,队列中的消息会被发送到错误的实例。

我知道这可以通过给 msgget 函数一个唯一的键来避免。 使用 ftok() 创建密钥,但由于变量相同,它们会导致 相同的键。

有人可以指导我如何为每个实例设置一个唯一的密钥吗?

我现在唯一的想法是随机分配给 ftok 的变量,然后 我知道那不可能。

【问题讨论】:

    标签: linux ipc message-queue ftok


    【解决方案1】:

    小心 ftok!

    这仅对给定的文件系统是唯一的,并且仅当 文件系统没有被大量使用。 fttok 由文件系统中的文件条目号驱动。

    这曾经是获得独特价值的一种很好的方式,但需要时间 摩尔定律在几年前赶上了它。它适用于 文件号的低 8 位,但实际文件号现在是 32 位 并且为每个文件系统重新开始编号。

    进程 ID 是一个不错的选择,它们确实会被重新循环,但不是 只要进程还活着。

    【讨论】:

    • 感谢您的建议!每次使用 ftok 时都会记住
    【解决方案2】:

    您可以尝试使用进程 ID。我的 google foo 得到了this

    【讨论】:

      【解决方案3】:

      查看全局唯一 ID,通常称为 Guid 或 Uuid。必须有一个可以用来生成它们的库。它们是由您的网卡地址、当前时间和随机数组成的唯一字符串。

      【讨论】:

        【解决方案4】:

        时钟呢? WikiPedia 说它比 RDTSC 更好(并且 SMP 安全)。

        “在 Linux 下,通过使用 POSIX clock_gettime 函数读取CLOCK_MONOTONIC 时钟的值来提供类似的功能。”

        【讨论】:

          猜你喜欢
          • 2019-01-18
          • 2020-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多