如果资源被taskA使用信号量锁定,并且任何其他任务访问资源(不受保护的访问)而没有锁定它,那么任务是否会进入等待状态?或者它是RTOS系统中的代码错误。
taskA() //low priority
{
SemLock(A);
A=10;
A=A+1;
SemmUnlock(A);
}
taskB() //high priority
{
A=20;
}
如果taskA正在运行且taskB到达那么taskB会在RTOS系统中等待吗?
答案 0 :(得分:1)
不,如果没有互斥锁(信号量)的任务没有尝试获取互斥锁,那么在使用资源之前它不会阻塞。 RTOS没有任何关于哪些任务正在使用资源的特殊意识。每个任务必须在使用资源之前获取互斥锁,以保护资源免受潜在的多次破坏性访问。
在您的示例中,任务B可以抢占任务A并在任务A锁定信号量时损坏资源。