临界区保护

2020-03-01 11:56发布

跨度稍微大一点,现在我们来讨论一个关于共享资源的问题。例如在程序中定义了一个全局数组变量delaytimes[] 这个全局变量除了运行的任务可以访问,中断异常处理也可以访问,那么问题来了,任务1先对delaytimes[] 进行读操作,在任务1读的过程中Systick触发了任务切换,这个时候切换到了任务2,恰巧任务2delaytimes[] 写操作,改变了delaytimes[]的一部分内容,当任务再切换回任务1的时候,接着读取delaytimes[] 中的内容,这样后面再读取的数据就不确定是否正确了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
dingbo95
2020-03-01 18:21
为了解决任务和任务,任务和中断之间共享资源的问题,我们引入了临界区保护,当要访问共享资源时,该代码段先进入临界区保护,操作完后退出临界区保护。其目的是在临界区保护段不会受到任何打扰,任务不会被切换。那么临界区保护是如何做到的呢?简单的说就是关中断,开中断的操作,进入临界区时关中断不再进行任务切换,退出临界区保护时恢复中断。遇到一个很聪明的学生,他提出了一个关于中断嵌套的问题:如果任务1里面某一段区域先对共享资源1访问,然后再访问资源1操作里又对资源2访问,那简单的关中断,开中断就不再奏效了。

一周热门 更多>