当前位置: 首页 > 面试题库 >

完成变量和信号量之间的区别

慎俊艾
2023-03-14
问题内容

在Linux内核中,信号量用于为数据的关键部分提供互斥,而Completion变量用于在等待事件的2个线程之间进行同步。为什么不使用信号量进行这种同步呢?使用完成变量比使用信号量有什么优势吗?


问题答案:

您可能要使用补全而不是信号量有两个原因。首先,多个线程可以等待完成,并且可以通过调用来全部释放它们complete_all()。使信号量唤醒未知数量的线程更为复杂。

其次,如果等待线程要取消分配同步对象,则在使用信号量时会出现竞争。也就是说,在使用唤醒线程完成之前,服务员可能会被唤醒并释放对象up()。这场比赛并不存在。(请参阅Lasse的帖子。)



 类似资料:
  • 完成信号量接口 结构体 struct   rt_completion   completion控制块 更多...   函数 void  rt_completion_init (struct rt_completion *completion)   初始化completion   rt_err_t  rt_completion_wait (struct rt_completion *completi

  • 问题内容: 有谁知道方法和()和和之间的差异。 您可以为每种方法公开伪代码吗? 问题答案: 从表面上看,这些方法的行为可能看起来很相似- 在某些情况下 可能使线程阻塞,在某些情况下可能会导致线程阻塞。但是,信号量和条件有不同的用途: 是相对较高级别的同步机制,供一般开发人员使用。您通常会使用它来限制对某些资源的并发访问,方法是在访问资源之前先进行每个请求者线程调用(如果没有信号灯许可,则使线程阻塞

  • 问题内容: 我已经在Python的Stack Exchange上阅读了很多答案,为什么在类中使用“ self”? 阅读这些答案后,我了解到实例变量对于该类的每个实例都是唯一的,而在所有实例之间共享类变量。 在玩耍时,我发现这段代码给出了输出: 但是,此代码作为输出,在我看来应为: 为什么我运行时类变量没有更新?我没有编程方面的经验,所以请原谅。 问题答案: 类变量 被 实例属性 遮盖 。这意味着在

  • 问题内容: 我是Java编程的新手。谁能说出Java中的全局变量和局部变量之间的区别? 问题答案: 您的问题有点困惑,因为您在标题中引用的是static / global,而在问题中引用的是global / local。 变量绑定到一个 类 , 每个类 将有 一个实例 。 类可以具有成员变量,并且该类的 每个实例 将有 一个实例 。 请注意,如果您有多个类加载器,这将变得更加复杂。在这种情况下,您

  • TypeScript中的和变量之间有什么区别?对于也存在类似的问题,但我不确定这两种语言中的概念是否相同。如果没有,了解这些差异将是有益的。

  • 问题内容: 请帮助我理解常量变量和Java变量之间的区别。我对此有些困惑。 问题答案: 常量 是概念,是变量的属性。 是用于声明常量变量的java关键字。 正如其他人所指出的那样,从语义/语言的观点来看, 常量变量 的表达是矛盾的,因此,我们可以争论其正确性。 引用规范,无论如何,我们可以阅读 原始类型的最终变量,并使用编译时常数表达式(第15.28节)进行了初始化,称为 常量变量 。 因此,我想