一、临界资源是什么
要独占式地访问临界资源,有3种方法:
1.公平竞争:比如使用互斥量,谁先获得互斥量谁就访问临界资源,这部分内容前面讲过。
谁要跟我抢,我就灭掉谁:
2.中断要跟我抢?我屏蔽中断
3.其他任务要跟我抢?我禁止调度器,不运行任务切换
二、暂停调度器
如果有别的任务来跟你竞争临界资源,你可以把中断关掉:这当然可以禁止别的任务运行,但是这代价太大了。它会影响到中断的处理。
如果只是禁止别的任务来跟你竞争,不需要关中断,暂停调度器就可以了:在这期间,中断还是可以发生、处理。
使用这2个函数来暂停、恢复调度器:
/* 暂停调度器 */
void vTaskSuspendAll( void );
/* 恢复调度器
* 返回值: pdTRUE表示在暂定期间有更高优先级的任务就绪了
* 可以不理会这个返回值
*/
BaseType_t xTaskResumeAll( void );
/****************使用方法***************************/
vTaskSuspendScheduler();
/* 访问临界资源 */
xTaskResumeScheduler();
三、屏蔽中断
这里