gpt4 book ai didi

c - 厕所 key 示例中二进制信号量和互斥量之间的区别?

转载 作者:行者123 更新时间:2023-12-02 03:45:14 24 4
gpt4 key购买 nike

我已经在 Stackoverflow 上阅读了有关此主题的帖子,但无法理解要点。也许我们可以将它们的差异限制在一个具体的例子中。

有一个带锁的厕所。Mutex:一个线程拿走 key 进去。如果有任何其他线程需要进入厕所,他们会等待。当前所有者出来并将 key 交给守卫(操作系统内核),守卫将厕所的所有权交给另一个人。

问题陈述:我看到所有人都同意共享资源必须由锁定它的线程中的同一个互斥锁解锁。但是对于二进制信号量,它也可以在任何其他线程中解锁。现在请考虑信号量的实现。

第一个人到达厕所,执行等待语句,信号量结构的值从 1 变为 0。现在如果任何其他人(其他线程)来执行等待语句,它会阻塞,因为 'value = 0'。那么为什么在没有其他线程可以进入临界区的情况下,总是说任何其他线程可以专门解锁马桶/临界区呢?

最佳答案

互斥锁具有线程亲和性。只有获得互斥量的线程才能释放它。信号量没有亲和性。这是 mutex 的一个很好的特性,它可以避免意外,并且可以在你出错时告诉你。互斥锁也可以是递归的,允许同一个线程多次获取它。一种防止意外死锁的对策。

有用的属性,您需要在编写并发代码时获得的所有帮助。但可以肯定的是,信号量也可以完成这项工作。

关于c - 厕所 key 示例中二进制信号量和互斥量之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453998/

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