一文带你深度了解FreeRTOS——递归互斥信号量
本篇文章主要介绍FreeRTOS的递归互斥信号量的知识。
一、什么是递归互斥信号量
递归互斥信号量是FreeRTOS中的一种信号量类型,设计用于允许同一任务在多次调用中安全地获得和释放信号量。它解决了传统互斥信号量在同一任务中重复获取时可能导致的死锁问题。
递归互斥信号量有什么特点?
特点
计数机制:递归互斥信号量内部维护一个计数器,每次任务成功获取信号量时,计数器加一;每次释放信号量时,计数器减一。当计数器为零时,信号量才真正被释放,这意味着其他任务可以获取它。
同一任务多次获取:同一任务可以在不同的函数调用中多次获取信号量,而不会引起阻塞。这对于嵌套调用或回调函数非常有用。
避免死锁:因为同一任务可以多次获取信号量,所以在复杂的函数调用中,可以有效避免死锁。
开销与性能:与普通互斥信号量相比,递归互斥信号量会引入额外的开销,尤其是在高频率请求时。因此,在性能敏感的场合,需要谨慎使用。