Live2d Test Env

资源管理

  对于共享资源的访问或者一些非原子操作的保护,有几种常用方法:

  1. 通过挂起中断创建临界区

  2. 通过挂起调度器

  3. 通过互斥量

 

1. 挂起中断

taskENTER_CRITICAL();
taskEXIT_CRITICAL();

  对于临界区的内容处理短、快速的代码,可以使用中断挂起,但是,该套函数挂起的中断仅仅是优先级在

 configMAX_SYSCAL_INTERRUPT_PRIORITY (包含)以下的中断。  

  这两个函数接口配对使用

  这两个函数支持嵌套使用

 

2. 挂起任务调度器

void vTaskSuspendAll( void );
portBASE_TYPE xTaskResumeAll( void );

  这个主要是临界区中的代码处理比较长,将调度器挂起,暂时独占CPU进行处理这段代码

 

 

3. 互斥信号量

  互斥信号量保证资源被安全的访问,但是,当低优先级任务占有资源时,高优先级任务也要等待低优先级任务释放资源才能进行访问。这是要避免死锁问题。

  对于互斥信号量导致的优先级倒挂问题,优先级继承可以对齐进行优化。

 守护进程;

  对于死锁和优先级倒挂问题,另一个解决方法是: 对于共享资源,仅由唯一一个任务(称作守护进程)进行操作,通过队列进行数据传递,此时,需要此进程有一个较高的优先级,保证能够及时相应,形成生产者消费者模式。

 

posted @ 2024-07-17 15:03  爬上那个坡  阅读(10)  评论(0编辑  收藏  举报