RT-Thread隐藏的宝藏之completion

本文详细介绍了RT-Thread实时操作系统中的completion机制,它是一种轻量级的线程间通信方式,类似于二值信号量。completion的使用包括初始化、等待和完成操作,其API简洁,资源占用少。与信号量相比,completion不支持多次释放,适用于简单的同步场景。在RT-Thread中,completion的实现涉及到线程挂起、唤醒以及调度。文章还对比了completion与信号量的差异,并说明了如何在工程中引入和使用completion。
  1. completion 是什么

completion 直接翻译过来是完成,所以我更愿意称 rt_completion 为 完成量。在 RT-Thread 的文档中心 中讲线程间通讯(IPC)时,只介绍了,信号量, 互斥量, 事件集,其实 rt_completion 可以认为是轻量级的二值信号量。
2. completion 怎么使用

completion 的使用非常简单

定义一个完成量

struct rt_completion completion;

初始化完成量

rt_completion_init(&completion);

等待完成量

rt_completion_wait(&completion);

释放完成量

rt_completion_done(&completion);
  1. completion 的实现

completion 的 API 非常少,可以通过简单的代码去分析

初始化完成量

void rt_completion_init(struct rt_completion *completion)
{
    rt_base_t level;
    RT_ASSERT(completion != RT_NULL);

    level = rt_hw_interrupt_disable();
    completion->flag = RT_UNCOMPLETED;
    rt_list_init(&completion->suspended_list);
    rt_hw_interrupt_enable(level);
}

干了两件事:
    设置 flag 为 RT_UNCOMPLETED
    初始化完成量的链表

等待完成量(以下代码有删减)

rt_err_t rt_completion_wait(struct rt_completion *completion,
                            rt_int32_t
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值