考虑以下代码
int Var;
Function1() {
[CS_Start]
Var++;
[CS_End]
}
Function2() {
[CS_Start]
Var += 2;
[CS_End]
}
ISR() {
[CS_Start]
Var--;
[CS_End]
}
如何在多任务处理环境中保护Var?我理解的设计之一是将Var保持为易失性,以便在多处理器调度方案中是安全的。此外,可以实现旋转锁定(代替互斥锁)以保护关键部分。
如果由Function1和ISR获取Spinlock(优先级高于调度程序计时器),会发生什么情况?ISR将继续轮询,而Function1永远不会有机会释放锁定。解决这个问题的方法是什么?