任何线程如何发出释放二进制信号量的信号

How can any thread signal for release of a binary semaphore

我是多线程范例的新手。在学习并发性时,我发现的每个来源都说:

"The difference between mutex and binary semaphore is the ownership i.e. a mutex can be signaled for release by only the thread who created it while a semaphore can be signaled any thread"

考虑线程A获取资源x上的二进制信号量锁并进行处理的场景。如果任何线程都可以为 x 上的锁调用释放信号,这是否会打开任何线程在线程 A 使用 x 时调用锁释放的可能性。

这是不是存在不一致的范围,或者我遗漏了什么?

当然,如果线程任意获取或释放信号量,结果将是灾难性的,事实上,实现不会阻止这种情况,并不意味着这是一个有用的场景。

但是,如果涉及的线程使用另一种机制来协调自身,同时使用信号量阻止这些不参与这些协调的线程,则可能会有实际用例。

假设您扩展一个用例,其中一个线程获取用于执行任务的信号量以并行执行所述任务。获取信号量后,会产生几个工作线程,每个工作线程处理数据的不同部分,因此自然而然地无干扰地工作。然后 last 工作线程释放信号量,这消除了启动线程和工作线程之间进行另一次通信的需要。当然,这需要工作线程检测它是否是最后一个,但是一个简单的原子整数保存活跃工作线程的数量就足够了。