php - PHP 的名为 mutexes 的 SyncMutex 类是否可以跨同一服务器上的不同进程工作?
问题描述
背景
我正在使用 Apache 和 PHP 构建一个 Web 应用程序,我需要同步对共享内存区域的访问。由于 PHP 的不同实例有不同的进程 ID,我想知道 PHP 的 SyncMutex 类与命名互斥锁是否可以用于此。在 Google 搜索中,我看到了很多关于将文件用作互斥锁的信息,但对于 SyncMutex 类来说却不多。除了类的定义和一些关于如何使用它的示例之外,甚至手册也没有更多的信息。
问题
一个进程中名为 mutex 的 SyncMutex 类在另一个进程中是否可见?
研究
https://helperbyte.com/questions/470561/how-to-prevent-simultaneous-running-of-a-php-script
最后
所涉及的数据是非常短暂的,并且可以随时更改(想想 C 中的 volatile 关键字)。数据在 30 秒左右后变得无用,并定期清除。出于性能原因,我将它存储在服务器的共享内存中,访问速度比写入文件或数据库要快得多。这是一个有效的用例还是我叫错了树?我应该使用其他东西吗?像信号量?
附加信息(2021 年 8 月 25 日编辑)
经过进一步研究,我发现 PHP 的 pthreads 模块在几个月前已被模块所有者贬低,不再维护。PHP 现在使用称为并行的东西来促进多线程。由于我正在使用的设置设计,并行与我正在尝试做的事情不兼容。所以看起来我现在必须使用 MySQL 来处理这个问题。
我使用内存服务器的想法仍然可行,但是由于 PHP 的多线程架构发生了变化,服务器需要用 PHP 以外的语言编写。这将使用 C++ 完成,但不是现在。
感谢所有回复的人。
解决方案
根据SyncMutex::unlock文档页面下方用户提供的示例,在一个进程中创建的 SyncMutex 锁在另一个进程中可见。
此外SyncSharedMemory类描述明确表示:
共享内存允许两个独立的进程进行通信,而不需要复杂的管道或套接字。[...] 仍然需要同步对象(例如 SyncMutex)来保护大多数共享内存的使用。
推荐阅读
- python-3.x - 无法使用自定义距离函数加载带有 lambda 函数的 keras 模型
- java - 创建单例实例时未定义构造函数
- dns - 带有 REDIRECT 和 INCLUDE 的 SPF 记录
- javascript - 笑话:如何测试可选对象键
- c# - Debug.Log() 从自定义类到主类的二维数组
- c++ - 引用命名空间会留下随机值吗?
- excel - 使用 VBA 在 excel 中创建每月选项卡
- javascript - 如何将 javascript 代码从导入添加到 iframe?
- python - 用 Python 填写动态在线表格
- uwp - VSTS - UWP - 多语言应用工具包 - 构建任务和生成的语言错误