请问如何使用shmop(如果重要的话,不是shm)在PHP中创建的共享内存被锁定和解锁?这需要库吗?
似乎shmop_read()在shmop_write()仍然在写时运行,因为值read包含旧值和新值的一部分。
答案 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_acquire
,sem_release
进行原子操作。
答案 2 :(得分:0)
我在PHP中找到了一些关于共享内存锁定的信息。
在这个页面上,用户声称已经非常成功地使用了“(...)mmcache的系统内存功能。它们抽象了所有困难的东西。” (link)
在图尔克MMCache的页面上: - 实现了新的API函数mmcache_lock和mmcache_unlock
应该支持Php5。希望也许你可以从这里开始......