目录
互斥量创建函数:xSemaphoreCreateMuxtex()
递归互斥量创建函数:xSemaphoreCreateRecursiveMuxtex()
递归互斥量获取函数:vSemaphoreTakeRecursive()
递归互斥量释放函数:vSemaphoreGiveRecursive()
互斥量的简介:
一个拥有优先级继承的二值信号量,在同步应用中十分适合,将优先级翻转的影响降到最低,但是不能完全消除
互斥量的优先级继承机制:
未使用互斥量:
使用了互斥量:暂时将低优先级任务的优先级提高,避免了M任务的运行,减少了H任务的阻塞时间,当信号量释放后,低优先任务的优先级回归
在一般使用中,任务需要按照优先级的排序来执行,但是在实际应用场合中某些资源只有一个,当低优先级任务占领的时候,高优先级任务就会阻塞,发生了优先级翻转情况,这样会导致系统运行不正常
互斥量的运作机制:
- 适用于可能会引起优先级翻转的情况
- 递归互斥量更适用于:任务可能会多次获取互斥量的情况下,避免一次任务多次递归持有而造成死锁的问题
互斥量的常用API函数:
互斥量创建函数:xSemaphoreCreateMuxtex()
递归互斥量创建函数:xSemaphoreCreateRecursiveMuxtex()
互斥量删除函数:vSemaphoreDelete()
互斥量获取函数:vSemaphoreTake()
递归互斥量获取函数:vSemaphoreTakeRecursive()
互斥量释放函数:vSemaphoreGive()
递归互斥量释放函数:vSemaphoreGiveRecursive()
只能在任务中释放不能在中断中释放,在获取信号量的任务结束时释放