【问题标题】:php shared memory and semaphore, avoid key collisionphp共享内存和信号量,避免键冲突
【发布时间】:2012-04-23 23:33:20
【问题描述】:

在使用 php 共享内存和信号量时。如何首先检查信号量和共享内存块的密钥是否与其他 php 实例冲突?另外,当使用 shm_attach 函数创建一个新块时,有没有办法验证该块不已经存在?

【问题讨论】:

    标签: php semaphore shared-memory


    【解决方案1】:

    我真的不明白你在这里问什么。共享内存的全部意义在于它是共享的 - 所以能够在不同的 PHP 实例中使用相同的密钥几乎是一项要求。

    通常人们使用文件系统路径(语义上有意义)通过 ftok() 函数生成密钥(没有意义)。如果你想生成一个不被任何其他 php 实例共享的随机密钥,那么使用 tempnam() 创建一个新文件,然后 ftok 。

    当使用 shm_attach 函数创建一个新区块时,有没有办法验证该区块是否已经存在?

    是的——在你创建之后把东西放在那里。如果在这两个步骤之间它是空的,那么它就是新的。

    【讨论】:

    • 假设您正在使用 100 个不同的信号量来处理 100 个不应该发生冲突的不同任务,您想以某种方式正确地跟踪它们,这就是他要问的。因此,基于路径名生成是确保这一点的一种方法。
    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2010-10-26
    • 2020-06-29
    相关资源
    最近更新 更多