2

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

似乎 shmop_read() 在 shmop_write() 仍在写入时运行,因为读取的值具有旧值和新值的一部分。

4

3 回答 3

2

您不能显式锁定共享内存段,但可以以独占模式打开它,例如

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

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

"n" 创建一个新的内存段(设置 IPC_CREATE|IPC_EXCL)当你想创建一个新的共享内存段时使用这个标志,但是如果已经存在一个具有相同标志的共享内存段,则失败。这对于安全目的很有用,使用它可以防止竞争条件漏洞。

于 2013-04-25T12:12:35.780 回答
1

我建议使用sem_acquire,sem_release来做原子操作。

于 2015-11-03T03:11:40.533 回答
0

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

在此页面上,用户声称“(...)非常成功地使用了 mmcache 的系统内存功能。他们抽象了所有困难的东西。” (链接

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

图尔克-mmcache

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

于 2013-04-25T12:31:14.623 回答