锁的本质是什么?
系统内的很多事情,本质上都是触发中断。内核就是一个响应中断的for循环。
就是cpu内核有一个hart , 关闭了mstatus的中断位。拉了总闸门。导致当前这个时间只能那个线程里面的事情。

使用锁

void user_task0(void)
{
    uart_puts("Task 0: Created!\n");
    while (1) {
#ifdef USE_LOCK
        spin_lock();
#endif
        uart_puts("Task 0: Begin ... \n");
        for (int i = 0; i < 5; i++) {
            uart_puts("Task 0: Running... \n");
            task_delay(DELAY);
        }
        uart_puts("Task 0: End ... \n");
#ifdef USE_LOCK
        spin_unlock();
#endif
    }
}

锁定义

#define MSTATUS_MIE (1 << 3)

int spin_lock()
{
    w_mstatus(r_mstatus() & ~MSTATUS_MIE);
    return 0;
}

int spin_unlock()
{
    w_mstatus(r_mstatus() | MSTATUS_MIE);
    return 0;
}

mstatus寄存器


putao
8 声望1 粉丝

推动世界向前发展,改善民生。