锁的本质是什么?
系统内的很多事情,本质上都是触发中断。内核就是一个响应中断的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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。