当前位置: 首页 > 知识库问答 >
问题:

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

鱼安然
2023-03-14

共有1个答案

江宏深
2023-03-14

一个非常粗略的近似是,如果您的执行线程在持有资源时需要阻塞(即互斥体,sem),您不应该使用互斥体。这种近似的问题是块在UI程序和中断处理程序中意味着不同的东西;阻塞是一个相对的概念。

互斥与所有者绑定;信号量不是。唯一可以释放互斥体的代理是获得互斥体的代理。信号量没有这种限制。由于这个限制,如果一个低优先级代理在互斥体上阻塞了一个高优先级代理,那么supervisor(内核,不管...)可以提升所有者的优先级,直到其放弃。这可以传递性地应用于解决非循环优先级反转。您不能用信号量来实现这一点,因为它们缺乏所有者的概念。

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

 类似资料:
  • 在计算信号量时,没有提供相互排斥,因为有一组同时需要在临界区执行的进程。 然而,二进制信号严格提供互斥。 在这里,临界区域不能有超过1个槽位,而临界区域最多只能有1个槽位。 信号量只能有两个值,0或1。 下面,我们来看看二进制信号量的编程实现。

  • 本文向大家介绍互斥与信号量,包括了互斥与信号量的使用技巧和注意事项,需要的朋友参考一下 Mutex和Semaphore都提供同步服务,但它们并不相同。下面给出有关Mutex和Semaphore的详细信息- 互斥体 互斥对象是一个互斥对象,用于同步对资源的访问。它是在程序开始时使用唯一名称创建的。互斥锁是一种锁定机制,可确保一次只有一个线程可以获取互斥锁并进入关键部分。该线程仅在退出关键部分时才释放

  • 问题内容: pthread库提供的信号量和互斥量有什么区别? 问题答案: 信号量具有同步计数器,互斥量仅是二进制的(真/假)。 信号量通常用作回答正在使用资源的多少元素的确定机制-例如,代表n个工作线程的对象可能使用信号量来计算有多少个工作线程可用。 事实是您可以用互斥量同步的INT表示信号量。

  • 问题内容: 我一直在尝试了解可重入锁和信号量(可重入锁的嵌套与释放/解锁机制)。 似乎拥有信号量需要您编写一个经过更彻底测试的应用程序,因为release()方法不会检查释放许可的线程是否实际上持有它。测试我的测试代码时,我发现这可能会随后使许可数量超出初始限制。另一方面,如果线程在调用unlock方法时未持有可重入锁,则将收到IllegalMonitorException。 因此,可以说没有真正

  • 线程使用互斥量保护共享资源 线程使用互斥量保护共享资源 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first versi

  • 互斥量接口 结构体 struct   rt_mutex   互斥量控制块 更多...   类型定义 typedef struct rt_mutex *  rt_mutex_t   互斥量类型指针定义   函数 rt_err_t  rt_mutex_init (rt_mutex_t mutex, const char *name, rt_uint8_t flag)   初始化互斥量   rt_err