mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 12:16:31 +00:00
新增rust版本的lockref (#135)
* new:Rust封装cpu_relax(),通过pause指令,让cpu休息一会儿。降低空转功耗 * new: Rust版本的lockref * Rust的RawSpinlock新增is_locked()和set_value()方法。 * lockref文档
This commit is contained in:
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user