我是多线程范例的新手。在学习并发性时,我发现的每个来源都说:
"互斥量和二进制信号量之间的区别在于所有权 也就是说,只有线程的人可以发信号通知互斥 创建它时,信号量可以通过任何线程发出信号"
考虑线程A已获取资源x上的二进制信号量锁并对其进行处理的情况。如果任何线程可以调用释放信号来锁定x,那么这就不会打开任何线程在线程A使用x时调用锁上释放的可能性。
是否存在不一致的范围,或者我遗漏了什么?
答案 0 :(得分:1)
当然,如果线程任意获取或释放信号量,结果将是灾难性的,并且实现不会阻止这一点的事实并不意味着这是一个有用的场景。
但是,如果涉及的线程使用另一种机制来协调自己,同时使用信号量来保持这些线程不参与这些协调,则可能存在实际用例。
想象一下,您扩展了一个用例,其中一个线程获取信号量以执行任务以并行执行所述任务。在获取信号量之后,产生了几个工作线程,每个线程处理数据的不同部分,因此自然地工作不干扰。然后 last 工作线程释放信号量,这消除了在启动线程和工作线程之间进行另一次通信的需要。当然,这需要工作线程检测它是否是最后一个,但是一个包含活动工作者数量的简单原子整数就足够了。