PHP 的名为互斥体的 SyncMutex 类是否可以在同一服务器上的不同进程之间工作?

Dan*_*udy 5 php mutex php-7

背景

我正在使用 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

PHP 互斥(mutex)

PHP 重写包含的文件 - 这是一个有效的脚本吗?

在 PHP 中防止竞争条件的最可靠和安全的方法

最后

所涉及的数据非常瞬态,并且可能会立即发生变化(想想 C 中的 volatile 关键字)。数据在 30 秒左右后变得无用,并会定期清除。出于性能原因,我将其存储在服务器的共享内存中,访问速度比写入文件或数据库要快得多。这是一个有效的用例还是我找错了树?我应该使用其他东西吗?就像信号量一样?

其他信息(编辑 8/25/2021)

经过进一步研究,我发现 PHP 的 pthreads 模块几个月前就被模块所有者贬值了,并且不再维护。PHP 现在使用称为并行的东西来促进多线程。由于我正在使用的设置的设计,并行与我想要做的事情不兼容。所以看来我现在必须使用 MySQL 来处理这个问题。

我使用内存服务器的想法仍然可行,但是由于PHP多线程架构的变化,服务器需要用PHP以外的语言编写。这将使用 C++ 来完成,但不是现在。

感谢所有回复的人。

小智 4

根据用户在SyncMutex::unlock文档页面下方提供的示例,在一个进程中创建的 SyncMutex 锁在另一个进程中可见。

另外SyncSharedMemory类描述明确指出:

共享内存允许两个独立的进程进行通信,而不需要复杂的管道或套接字。[...] 仍然需要同步对象(例如 SyncMutex)来保护共享内存的大多数使用。