请问如何使用 shmop(如果重要,不是 shm)在 PHP 中创建的共享内存被锁定和解锁?这需要图书馆吗?
似乎 shmop_read() 在 shmop_write() 仍在写入时运行,因为读取的值具有旧值和新值的一部分。
请问如何使用 shmop(如果重要,不是 shm)在 PHP 中创建的共享内存被锁定和解锁?这需要图书馆吗?
似乎 shmop_read() 在 shmop_write() 仍在写入时运行,因为读取的值具有旧值和新值的一部分。
您不能显式锁定共享内存段,但可以以独占模式打开它,例如
shmop_open($shm_key, "n", 0644, 100);
引用http://www.php.net/manual/en/function.shmop-open.php
"n" 创建一个新的内存段(设置 IPC_CREATE|IPC_EXCL)当你想创建一个新的共享内存段时使用这个标志,但是如果已经存在一个具有相同标志的共享内存段,则失败。这对于安全目的很有用,使用它可以防止竞争条件漏洞。
我建议使用sem_acquire
,sem_release
来做原子操作。
我在 PHP 中找到了一些关于共享内存锁定的信息。
在此页面上,用户声称“(...)非常成功地使用了 mmcache 的系统内存功能。他们抽象了所有困难的东西。” (链接)
在 Turck MMCache 的页面上: - 实现了新的 API 函数 mmcache_lock 和 mmcache_unlock
应该支持php5。希望也许你可以从这里开始......