xwrust::xwos::lock

Module spinlock

source
Expand description

§XWOS RUST:自旋锁

自旋锁是多核系统中为防止多个处理器同时访问临界区而引入的一种锁。 当一个CPU获得自旋锁并访问临界区时,其他CPU只能 自旋 等待。 所谓 自旋 ,是指不断循环测试锁的是否可用。

自旋锁内的操作是不可被打断的。因此,自旋锁还伴随其他操作, 例如关闭调度器的抢占,关闭中断底半部,关闭中断等。

在单核(UP)系统中,只有一个CPU,不需要自旋过程,单核系统为了软件接口与多核系统兼容, 也会实现自旋锁,这种自旋锁只需关闭抢占、中断底半部或中断。

自旋锁可用在 任何上下文(Context)

§创建

XWOS RUST的自旋锁可使用 Spinlock::new() 创建:

  • 可以创建具有静态生命周期 static 约束的全局变量:
use xwrust::xwos::lock::spinlock::*;

static GLOBAL_SPINLOCK: Spinlock<u32> = Spinlock::new(0);
extern crate alloc;
use alloc::sync::Arc;

use xwrust::xwos::lock::spinlock::*;

pub fn xwrust_example_spinlock() {
    let spinlock: Arc<Spinlock<u32>> = Arc::new(Spinlock::new(0));
}

§解锁

上锁后返回的 SpinlockGuardSpinlockGuard 的生命周期结束时,会自动解锁。 也可调用 Spinlock::unlock() 主动消费掉 SpinlockGuard 来解锁。

§上锁

上锁的方法 Spinlock::lock() 除了 自旋 等待,还会根据上锁模式增加额外操作:

§尝试上锁

尝试上锁的方法 Spinlock::trylock() 只会测试一下锁,不会 自旋 等待,上锁成功后还会根据上锁模式增加额外操作:

§示例

XWOS/xwam/xwrust-example/xwrust_example_spinlock

Structs§

Enums§

Constants§