场景大致如下:
任务task_A优先级为6,任务task_B优先级为4。
在任务task_A执行函数func_A()过程中,condition_B条件成立, func_B()执行。
func_B()先锁调度器rt_enter_critical(),再调用func_A(),func_A()再调用rt_mutex_take(Mutex_Test, RT_WAITING_FOREVER);
在rt_mutex_take()内部调用 rt_schedule(),但是因为func_B()里锁了调度器,所以这里并没有实际发生调度,此时Mutex_Test的owner还是task_A,之后rt_mutex_take() 正常返回RT_EOK。
等代码执行到对应的rt_mutex_release(Mutex_Test)
时候,就会因为该函数里的if (thread != mutex->owner)
而失败。
这就导致本来想用Mutex来保护资源,没有得到正确保护(即在任务task_A里访问资源过程中被task_B抢占破坏)
关于Mutex,文档在似乎只说明不要在中断中使用,没有更多注意事项
是违背了临界区概念的设计初衷。。。