#临界区 #同步 #自旋锁 #arceos #no-irq

无std kspin

用于内核空间的自旋锁,可以在临界区禁用抢占或中断请求(IRQ)

1 个不稳定版本

0.1.0 2024年7月17日

#173 in 操作系统

Download history 412/week @ 2024-07-17 461/week @ 2024-07-24 467/week @ 2024-07-31 144/week @ 2024-08-07

1,484 每月下载量

GPL-3.0-or-later OR Apache-2…

17KB
302

kspin

Crates.io Docs.rs CI

用于内核空间的自旋锁,可以在临界区禁用抢占或中断请求(IRQ)。

Cargo功能

  • smp: 用于 多核 环境。对于 单核 环境(无此功能),锁状态是不必要的,并且已优化。如果我们遵循使用的正确保护措施,CPU总能获得锁。默认情况下,此功能是禁用的。

示例

use kspin::{SpinNoIrq, SpinNoPreempt, SpinRaw};

let data = SpinRaw::new(());
let mut guard = data.lock();
/* critical section, does nothing while trying to lock. */
drop(guard);

let data = SpinNoPreempt::new(());
let mut guard = data.lock();
/* critical section, preemption are disabled. */
drop(guard);

let data = SpinNoIrq::new(());
let mut guard = data.lock();
/* critical section, both preemption and IRQs are disabled. */
drop(guard);

依赖项

~230–670KB
~16K SLoC