2.3.2 互斥(Mutual Exclusion)
互斥是用来控制多任务对共享数据进行串行访问的同步机制。在多任务应用中,当两个或多个任务同时访问共享数据时,可能会造成数据破坏。互斥使它们串行地访问数据,从而达到保护数据的目的.
解决互斥的几种方法:
1. 关闭中断的方法(IntLock): 能解决任务和中断ISR之间产生的互斥.
FuncA ()
{ Int Lock = IntLock();
. . Critical Region That Cannot Be Interrupted .
IntUnlock (Lock); }
但在实时系统中采取这个办法会影响系统对外部中断及时响应和处理的能力.
2. 关闭系统优先级(TaskLock): 关闭系统优先级,这样在当前任务执行时,除了中断外,不会有其他优先级高的任务来抢占CPU,影响当前程序运行.
FuncA ()
{ TaskLock ();
. . Critical Region That Cannot Be Interrupted .
TaskUnlock (); }
这种方法阻止了高优先级的任务抢先运行,在实时系统中也是不适合的,除非关闭优先级的时间特别短. |