互斥量与二进制信号量之间的实际差异

问题描述 投票:0回答:1

所以,上周,我正在研究Mutex和Semaphores。我来发现这个post确实帮助我弄清楚了信号量是什么。现在,我了解了Binary信号量和Mutex之间的theorical区别是什么,我仍然想知道howactual使用它们。我目前正在使用C#,但找不到任何使用这种语言的Binary信号量的方法。

有人可以张贴任何(简单的)代码示例来说明如何使用Binary信号量vs Mutex吗?任何广泛使用的语言都可以胜任。您甚至可以发布Powershell / Bash脚本。

multithreading thread-safety mutex semaphore binary-semaphore
1个回答
0
投票

一个非常近似的近似值是,如果您的执行线程需要在保存资源(例如互斥锁,sem)时阻塞,则不应使用互斥锁。这种近似的问题在于,该块意味着UI程序和中断处理程序中的某些内容有所不同。阻塞是一个相对的概念。

Mutexes绑定到所有者;信号量不是。可以释放互斥锁的唯一代理是获取互斥锁的代理。信号量没有此限制。由于此限制,如果低优先级代理阻止互斥量上的高优先级代理,则主管(内核等)可以提高所有者的优先级,直到其放弃。这可以传递应用来解决非循环优先级反转。您无法使用信号量来执行此操作,因为信号量缺少所有者的概念。

例如,线程1可以获取信号量,线程2可以等待它,而线程3可以放弃它。这听起来可能很混乱,但这可能是更复杂的系统的基础,其中线程3和1通过某种方式进行通信,因此线程1可以将资源所有权直接移交给线程3。这不能用互斥锁完成。

那个;我想将pthread_mutex_transfer(mutex,pthread)破解到任何现有的实现中,对纯粹主义者和理论家大加赞赏。

© www.soinside.com 2019 - 2024. All rights reserved.