complete完成量

在Linux内核中,完成量和信号量是两种不同的同步机制。信号量用于保护关键数据的互斥访问,而完成量主要用于线程间的同步。完成量的优势在于能一次性唤醒多个等待线程,并且在释放同步对象时避免了竞争条件。相比之下,信号量在唤醒不确定数量的线程时操作更复杂,且可能存在释放同步对象时的竞争问题。
摘要由CSDN通过智能技术生成

完成量和等待队列都是异步poll机制的核心实现底层支持,这两个内容相比较与之前我们讲的进程-线程-多核之间消息互通机制而言增加了额外的内容处理。完成量很像信号量在获取不到时默认直接讲驱动自己休眠掉,当数据触发的情况下完成量被满足,内部的调用机制满足完成量内部就会自己完成等待函数的处理与调度。相比较信号量是直接在调用进程自己这里休眠了,而不是通过复杂的进程调度管理机制。

通过完成量实现内核驱动开发工作,完成量底层分装了等待队列内容,实现了驱动多进程之间消息互通。实际在裸机驱动开发过程中,如果一个中断信号过来,我们通过将一个标识位置修正为一个新的量,这样对应阻塞位置的程序开始进行调度工作。

4. 完成量和信号量差别

在 linux内核中,信号量用于为关键的数据部分提供互斥,而完成变量用于在等待事件的2个线程之间进行同步.为什么不使用信号量进行这种同步?在信号量上使用完成变量有什么好处吗? 您可能希望使用完成而不是信号量有两个原因.首先,多个线程可以等待完成,并且可以通过一次调用complete_all()来释放它们.让信号量唤醒未知数量的线程会更复杂. 其次,如果等待线程要释放同步对象,则在使用信号量时存在竞,下方主要介绍关于linux – 完成变量和信号量之间的差异的全文内容,希望对你有所帮助。

在 linux内核中,信号量用于为关键的数据部分提供互斥,而完成变量用于在等待事件的2个线程之间进行同步.为什么不使用信号量进行这种同步?在信号量上使用完成变量有什么好处吗? @H_404_2@

解决方法

您可能希望使用完成而不是信号量有两个原因.首先,多个线程可以等待完成,并且可以通过一次调用complete_all()来释放它们.让信号量唤醒未知数量的线程会更复杂.

其次,如果等待线程要释放同步对象,则在使用信号量时存在竞争条件.也就是说,在使用up()完成唤醒线程之前,服务员可能会被唤醒并释放对象.完成时不存在此种族. (见Lasse的帖子.)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值