推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

实验21_递归互斥量.docx

资料介绍

实验 21:递归互斥量

实验说明

实验概述

递归互斥量(Recursive Mutex)是互斥量的一种特殊形式,它允许同一个任务多次获取同一把锁,而不会导致死锁。这一特性在函数嵌套调用场景中非常有用:例如,任务 A 的函数 func1 需要获取锁,然后调用 func2,而 func2 也需要获取同一把锁。如果使用普通互斥量,这种情况会导致死锁——因为任务已经持有了锁,再次获取会阻塞自身。递归互斥量通过内部计数器机制解决了这个问题,每次获取时计数器加 1,每次释放时计数器减 1,只有当计数器归零时,锁才真正被释放。

实验原理

递归互斥量的核心在于其内部维护了一个"持有者"记录和一个"获取计数"。当任务调用 xSemaphoreTakeRecursive() 时,系统会检查当前调用者是否已经是该互斥量的持有者。如果是,则直接递增获取计数并返回成功,不会导致任务阻塞。当任务调用 xSemaphoreGiveRecursive() 时,获取计数递减,只有当计数归零时,互斥量才真正被释放,其他任务才能获取。这种机制确保了同一个任务可以安全地嵌套调用需要锁保护的函数。

关键知识点

1. 递归互斥量使用 xSemaphoreCreateRecursiveMutex() 创建。

2. 获取和释放必须使用 TakeRecursive / GiveRecursive 版本。

3. 适用于递归函数或嵌套函数调用的场景。

实验现象

任务调用嵌套函数,在递归互斥量保护下,函数可以安全地递归调用,不会发生死锁。串口打印出嵌套获取和释放


部分文件列表

文件名 大小
实验21_递归互斥量.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单
  • 21下载积分 打赏60.00元   3天前

    用户:gsy幸运

  • 21下载积分 打赏70.00元   3天前

    用户:铁蛋锅

  • 21下载积分 打赏65.00元   3天前

    用户:xzxbybd

  • 21下载积分 打赏60.00元   3天前

    用户:jh0355

  • 21下载积分 打赏60.00元   3天前

    用户:w178191520

  • 21下载积分 打赏20.00元   3天前

    用户:jh03551

  • 21下载积分 打赏20.00元   3天前

    用户:sun2152

  • 21下载积分 打赏20.00元   3天前

    用户:kk1957135547

  • 21下载积分 打赏25.00元   3天前

    用户:w1966891335

  • 21下载积分 打赏20.00元   3天前

    用户:xuzhen1

  • 21下载积分 打赏15.00元   3天前

    用户:x15580286248

  • 21下载积分 打赏25.00元   3天前

    用户:pcb

  • 21下载积分 打赏20.00元   3天前

    用户:bhacker

  • 21下载积分 打赏15.00元   3天前

    用户:liqiang9090

  • 21下载积分 打赏25.00元   3天前

    用户:有理想666

  • 21下载积分 打赏15.00元   3天前

    用户:godbox

  • 21下载积分 打赏15.00元   3天前

    用户:aetek

  • 21下载积分 打赏5.00元   3天前

    用户:mulanhk

  • 21下载积分 打赏5.00元   3天前

    用户:JuneLin61

推荐下载