如果您想实现这种信号量访问(这通常是在执行 ipc 时所需的),您可以做的一件事是创建共享内存,它只是一个 int。在进程之间使用此 int 作为信号量的值。您可以编写包装函数,使用它允许您执行所需的读写器操作,或者只使用纯共享内存。在这种情况下,我不太担心竞争条件,因为共享内存只是一个 int。如果您担心竞争条件,用于执行信号量操作的包装函数实际上可以使用信号量来消除任何竞争条件。此外,这样做的额外好处是您可以检查 int 的值。
(PHP 4, PHP 5, PHP 7, PHP 8)
sem_release — 释放信号量
如果您想实现这种信号量访问(这通常是在执行 ipc 时所需的),您可以做的一件事是创建共享内存,它只是一个 int。在进程之间使用此 int 作为信号量的值。您可以编写包装函数,使用它允许您执行所需的读写器操作,或者只使用纯共享内存。在这种情况下,我不太担心竞争条件,因为共享内存只是一个 int。如果您担心竞争条件,用于执行信号量操作的包装函数实际上可以使用信号量来消除任何竞争条件。此外,这样做的额外好处是您可以检查 int 的值。
sem_release 仅在调用进程当前获取信号量时才释放信号量这一事实实际上是一个缺陷,因为有时(例如在读写器实现中)需要释放由另一个进程获取的信号量。在 C 中你可以这样做。
我之所以说这个,是因为我试图用 php3 编写一个由两个程序组成的聊天应用程序:一个监听器和一个说话者。说话者释放一个信号量以通知共享内存变量中有一条新消息。在输出消息之前,监听器会在该信号量中等待。