- 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);
- 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

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





