gpt4 book ai didi

c - spin_lock_bh() 是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 22:16:23 25 4
gpt4 key购买 nike

我有一个正在使用的设备驱动程序,它在 ISR(更具体地说是 ISR 的下半部分)和 read() 之间具有共享资源。称呼。

ISR 只是调用 schedule_work()让下半部分做繁重的工作。资源在 read() 之间共享(即用户上下文)和实现下半部分的函数,这就是我使用 spin_lock_bh() 锁定的原因.

我不明白的是锁定的机制。假设当前有人持有锁,当 ISR 命中 schedule_work() 时会发生什么? (即,当我们持有锁时触发了硬件中断)?工作是否仍按计划进行,然后稍后再运行,还是会掉到地上?换一种说法......实际上“锁定”或阻止了什么(即工作队列或工作的执行)?工作队列是否更新?

为了对比我的问题,我知道如果我使用 spin_lock_irqsave() , ISR 会在持有锁时被禁用,所以我不会到达 schedule_work()首先,但考虑到资源的共享方式,我认为我不需要或不想在持有锁时禁用硬件中断。

最佳答案

如果 ISR 可能由不禁用中断的代码持有,则 ISR 不能等待锁定。这将导致僵局。 spin_lock_irqsave首先禁用中断,保存之前的状态,然后获取锁。还原以相反的顺序撤消此操作。

下半部分仍然是一个中断。 spin_lock_bh通过禁用下半部分执行,然后获取锁来执行等效操作。这可以防止下半部分执行踩到我们的read。代码。

锁可防止多个线程执行锁定的代码。工作队列只有在持有锁时才被操作来保护。

关于c - spin_lock_bh() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379299/

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