如果资源被RTOS系统中的另一个任务锁定,没有锁定资源的任务是否会等待?
Will the task without locking the resource wait if the resource is locked by another task in RTOS system?
如果资源被 taskA 使用信号量锁定,并且如果任何其他任务在未锁定资源的情况下访问资源(未受保护的访问),那么该任务是否会进入等待状态?或者是RTOS系统的代码错误。
taskA() //low priority
{
SemLock(A);
A=10;
A=A+1;
SemmUnlock(A);
}
taskB() //high priority
{
A=20;
}
如果 taskA 是 运行 并且如果 taskB 到达那么 taskB 会在 RTOS 系统中等待吗?
不,如果没有互斥锁(信号量)的任务不尝试获取互斥锁,那么它不会在使用资源之前阻塞。 RTOS 对哪些任务正在使用资源没有任何特殊认识。每个任务都必须在使用资源之前获取互斥锁,以保护资源免受潜在的多次损坏访问。
在您的示例中,任务 B 可以抢占任务 A 并在任务 A 锁定信号量时破坏资源。
如果资源被 taskA 使用信号量锁定,并且如果任何其他任务在未锁定资源的情况下访问资源(未受保护的访问),那么该任务是否会进入等待状态?或者是RTOS系统的代码错误。
taskA() //low priority
{
SemLock(A);
A=10;
A=A+1;
SemmUnlock(A);
}
taskB() //high priority
{
A=20;
}
如果 taskA 是 运行 并且如果 taskB 到达那么 taskB 会在 RTOS 系统中等待吗?
不,如果没有互斥锁(信号量)的任务不尝试获取互斥锁,那么它不会在使用资源之前阻塞。 RTOS 对哪些任务正在使用资源没有任何特殊认识。每个任务都必须在使用资源之前获取互斥锁,以保护资源免受潜在的多次损坏访问。
在您的示例中,任务 B 可以抢占任务 A 并在任务 A 锁定信号量时破坏资源。