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 个笔记

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