【发布时间】:2018-08-04 06:27:19
【问题描述】:
我有一个使用共享内存的父子进程。 孩子每秒将数据放入共享内存大约 10 次。 父母和孩子在写/读时使用信号量来锁定资源。 这个解决方案工作了几个小时,然后我开始收到警告:
PHP 警告:sem_acquire():未能获取密钥 0x4101f1fb:第 350 行 script.php 中的参数无效
PHP 警告:sem_release(): SysV 信号量 140105644163240(键 0x4101f1fb)当前未在 script.php 的第 354 行获取
看起来脚本超出了某些限制并且信号量被破坏,但我在 ipcs 中找不到任何与当前限制/使用有关的内容。
我也尝试 sem_get 以获取新的信号量 ID,但我无法通过共享内存将其传递给子进程 shm_put_var 无法使用资源。 p>
在长期运行的进程中处理信号量的最佳方法是什么?
【问题讨论】:
-
我个人认为像Redis 这样的技术已经让整个操作系统级别的信号量和共享内存分配过时了。
标签: php semaphore shared-memory