rtt——线程间通信(互斥量)

互斥量的概念

在 RT-Thread 中,互斥量(Mutex,互斥锁)用于确保共享资源在任意时刻只被一个线程访问

  • 确保共享资源的互斥访问:互斥量用于保护对共享资源的访问,确保在任意时刻只有一个线程可以访问该资源;避免多个线程同时修改共享资源而导致的数据不一致或竞态条件
  • 实现临界区保护:互斥量通常用于实现临界区保护,将对共享资源的访问限制在临界区内。只有获取了互斥量的线程才能进入临界区,其他线程需要等待互斥量释放后才能进入
  • 防止死锁和资源竞争:RT-Thread 的互斥量实现通常会考虑死锁和资源竞争的问题
  • 提供更细粒度的同步机制:相比信号量,互斥量提供了更细粒度的同步机制;它通常用于保护单个共享资源或临界区,而信号量则更适合用于限制对资源数量的访问

互斥量只有两个状态:被锁定和未锁定

即当一个低优先级任务持有互斥量时,系统会提升其优先级到需要访问该资源的最高优先级任务的优先级,以防止高优先级任务被阻塞(优先级翻转

互斥量相关接口

创建互斥量

rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag);

删除互斥量

rt_err_t rt_mutex_delete(rt_mutex_t mutex);

初始化互斥量

rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag);

脱离互斥量

rt_err_t rt_mutex_detach(rt_mutex_t mutex);

获取互斥量

  • 如果互斥量没有被其他线程控制,那么申请该互斥量的线程将成功获得该互斥量;
  • 如果互斥量已经被当前线程线程控制,则该互斥量的持有计数加 1,当前线程也不会挂起等待;
  • 如果互斥量 已经被其他线程占有,则当前线程在该互斥量上挂起等待,直到其他线程释放它或者等待时间超过指定的 超时时间
rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time);

释放互斥量

只有已经拥有互斥量控制权的线程才能释放它,每释放一次该互斥量,它的持有计数就减1

当该互斥量的持有计数为零时(即持有线程已经释放所有的持有操作),它变为可用,等待在该信号量上的线程将被唤醒

如果线程的运行优先级被互斥量提升, 那么当互斥量被释放后,线程恢复为持有互斥量前的优先级。

rt_err_t rt_mutex_release(rt_mutex_t mutex);

如果您觉得这篇文章不错,且手里较为宽裕,可以支持一下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇