1 中断锁定义 中断锁即为全局中断开关,是禁止多线程访问临界区最简单的一种方式,即通过关闭中断的方式,来保证当前线程不会被其他事件打断(此时系统不再响应可以触发线程调度的外部事件),除非这个线程主动放弃了处理器控制权。 CM3中线程调度是利用PendSV悬起异常完成的,PendSV中断的优先级一般设为最低(不能让线程抢占中断获取CPU的使用权),因此关闭中断后,系统不再响应可触发线程调度的外部事件。因此,如果在中断锁保护的临界区内主动发起线程调度,需要等中断锁打开后才能执行。 注意:这里的关中断,只是屏蔽了全局中断请求,配置使能的中断在触发后,不会立即执行中断服务例程ISR,等中断打开后才会执行。 应用场合与注意事项 中断锁是最强大的和最高效的同步方法,使用中断锁来操作临界区的方法可以应用于任何场合,其他几类同步方式(如信号量、互斥量等)均依赖于中断锁实现。但中断锁对系统实时性影响巨大,关闭中断会导致整个系统不能响应外部中断,使用时需保证关闭中断的时间非常短,遵循“快进快出”原则,否则会导致系统完全无实时性可言。 例如:某时刻有一个线程运行时进入临界段,并且采用中断锁保护,此时若有一个紧急的中断事件被触发,该中断就会被挂起,不能及时响应,必须等待中断开启后才可以得到响应,如果关中断时间超过了紧急中断能容忍的限度,危害可想而知。 RT-Thread 源码中有许多处临界段的地方,临界段虽然用中断锁保护了关键代码的执行不被打断,但也会影响系统的实时,任何使用了操作系统的中断响应都不会比裸机快。 在中断服务函数中也可以使用中断锁,防止被更高优先级的中断打断(CM3支持中断嵌套)
原作者:柯西的彷徨
0
|
|
|
|