PHP Conference Japan 2024

sem_release

(PHP 4, PHP 5, PHP 7, PHP 8)

sem_release释放信号量

描述

sem_release(SysvSemaphore $semaphore): bool

sem_release() 如果信号量当前被调用进程获取,则释放该信号量,否则会生成警告。

释放信号量后,可以调用 sem_acquire() 重新获取它。

参数

semaphore

sem_get() 返回的信号量。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.0.0 semaphore 现在期望一个 SysvSemaphore 实例;以前,期望的是一个 resource

参见

添加注释

用户贡献的注释 2 条注释

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