如何在php(shmop)中锁定共享内存

时间:2013-04-25 12:07:00

标签: php

请问如何使用shmop(如果重要的话,不是shm)在PHP中创建的共享内存被锁定和解锁?这需要库吗?

似乎shmop_read()在shmop_write()仍然在写时运行,因为值read包含旧值和新值的一部分。

3 个答案:

答案 0 :(得分:2)

您无法明确锁定共享内存段,但可以在独占模式下打开它,例如

shmop_open($shm_key, "n", 0644, 100);

引用http://www.php.net/manual/en/function.shmop-open.php

  

“n”创建新的内存段(设置IPC_CREATE | IPC_EXCL)如果要创建新的共享内存段但使用相同的标志已经存在,则使用此标志失败。这对于安全性目的很有用,使用它可以防止竞争条件漏洞。

答案 1 :(得分:1)

我建议使用sem_acquiresem_release进行原子操作。

答案 2 :(得分:0)

我在PHP中找到了一些关于共享内存锁定的信息。

在这个页面上,用户声称已经非常成功地使用了“(...)mmcache的系统内存功能。它们抽象了所有困难的东西。” (link

在图尔克MMCache的页面上:   - 实现了新的API函数mmcache_lock和mmcache_unlock

turck-mmcache

应该支持Php5。希望也许你可以从这里开始......