gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:43:35 25 4
gpt4 key购买 nike

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

"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 时调用锁释放的可能性。

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

最佳答案

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

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

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

关于multithreading - 任何线程如何发出释放二进制信号量的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30008204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com