c-从内核启用和禁用中断如何防止竞争条件



我唯一能想到的是启用/禁用中断也会禁用内核抢占。这将使得多个线程不可能(?)同时接触共享内核数据。

是否有我遗漏的东西(可能是因为您一次只能启用/禁用一个CPU的中断?)?

在单处理器系统的旧时代,阻塞中断是锁定内核数据结构的方法。如果中断X正在更改某些内容,它将不希望更高优先级的中断Y执行并使数据结构处于模糊状态。当然,X应该只在所需的最短时间内阻止中断。

在多处理器系统中,您必须添加软件锁定,以防止另一个进程在修改系统数据结构时干扰系统数据结构(包括中断和系统调用)。

但是,您仍然必须阻止中断。如果中断X的数据结构被锁定(或部分锁定),并且中断Y能够执行,那么它可以尝试锁定相同的数据结构,并将永远等待。

最新更新