新增rust版本的lockref (#135)

* new:Rust封装cpu_relax(),通过pause指令,让cpu休息一会儿。降低空转功耗

* new: Rust版本的lockref

* Rust的RawSpinlock新增is_locked()和set_value()方法。

* lockref文档
This commit is contained in:
login
2023-01-03 23:09:25 +08:00
committed by GitHub
parent 2726f101b4
commit 61de2cdc3f
10 changed files with 557 additions and 7 deletions

View File

@ -57,6 +57,10 @@ pub fn spin_unlock_irq(lock: *mut spinlock_t) {
sti();
}
/// 原始的Spinlock自旋锁
/// 请注意这个自旋锁和C的不兼容。
///
/// @param self.0 这个AtomicBool的值为false时表示没有被加锁。当它为true时表示自旋锁已经被上锁。
#[derive(Debug)]
pub struct RawSpinlock(AtomicBool);
@ -107,6 +111,21 @@ impl RawSpinlock {
sti();
}
/// @brief 判断自旋锁是否被上锁
///
/// @return true 自旋锁被上锁
/// @return false 自旋锁处于解锁状态
pub fn is_locked(&self)->bool
{
return self.0.load(Ordering::Relaxed).into();
}
/// @brief 强制设置自旋锁的状态
/// 请注意这样操作可能会带来未知的风险。因此它是unsafe的。尽管从Rust语言本身来说它是safe的
pub unsafe fn set_value(&mut self, value:bool){
self.0.store(value, Ordering::SeqCst);
}
// todo: spin_lock_irqsave
// todo: spin_unlock_irqrestore