背景
我正在使用 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 秒左右后变得无用,并会定期清除。出于性能原因,我将其存储在服务器的共享内存中,访问速度比写入文件或数据库要快得多。这是一个有效的用例还是我找错了树?我应该使用其他东西吗?就像信号量一样?
其他信息(编辑 8/25/2021)
经过进一步研究,我发现 PHP 的 pthreads 模块几个月前就被模块所有者贬值了,并且不再维护。PHP 现在使用称为并行的东西来促进多线程。由于我正在使用的设置的设计,并行与我想要做的事情不兼容。所以看来我现在必须使用 MySQL 来处理这个问题。
我使用内存服务器的想法仍然可行,但是由于PHP多线程架构的变化,服务器需要用PHP以外的语言编写。这将使用 C++ 来完成,但不是现在。
感谢所有回复的人。
小智 4
根据用户在SyncMutex::unlock文档页面下方提供的示例,在一个进程中创建的 SyncMutex 锁在另一个进程中可见。
另外SyncSharedMemory类描述明确指出:
共享内存允许两个独立的进程进行通信,而不需要复杂的管道或套接字。[...] 仍然需要同步对象(例如 SyncMutex)来保护共享内存的大多数使用。