alios thing 信号量_信号量_AliOS Things内核_API参考文档_AliOS Things 文档_IoT物联网操作系统 - 阿里云...

对于多任务,甚至多核的操作系统,需要访问共同的系统资源。共享资源包括软件资源和硬件资源,软件共享资源主要是共享内存,包括共享变量、共享队列等等,硬件共享资源包括一些硬件设备的访问,例如:输入/输出设备。为了避免多个任务访问共享资源时相互影响甚至冲突,需要对共享资源进行保护,有下列几种处理方式:开关中断、信号量(semphore)、互斥量(mutex)。

开关中断:一般用于单核平台多任务之间的互斥,通过关闭任务的调度,从而达到单任务访问共享资源的目的。缺点是会影响中断响应时间。

信号量:多任务可以通过获取信号量来获取访问共享资源,可以配置信号量的数目,让多个任务同时获取信号量,当信号量无法获取时,相关任务会按照优先级排序等待信号量释放,并让出CPU资源;缺点是存在高低任务优先级反转的问题。

互斥量:任务也是通过获取mutex来获取访问共享资源的门禁,但是单次只有一个任务能获取到该互斥量。互斥量通过动态调整任务的优先级来解决高低优先级反转的问题。

本章节介绍AliOS Thngs上的信号量接口。

API 列表

aos_sem_new()

创建信号量对象

aos_sem_free()

删除信号量对象

aos_sem_wait()

请求一个信号量

aos_sem_signal()

释放一个信号量

aos_sem_is_valid()

判断信号量对象是否有效

aos_sem_signal_all()

释放信号量,并唤醒所有阻塞在该信号量上的任务

使用

添加该组件

信号量是AliOS Things 默认添加的组件,开发者无需再手动添加。

包含头文件

#include

使用示例

示例说明:当前任务创建一个信号量和子任务,并等待子任务释放信号量。

static aos_sem_t g_sem_taskexit_sync;

unsigned int stack_size = 1024;

int ret = -1;

....

static void task1(void *arg)

{

....

/*释放信号量*/

aos_sem_signal(&g_sem_taskexit_sync);

....

}

/*当前任务:创建信号量,信号量初始count为0*/

ret = aos_sem_new(&g_sem_taskexit_sync, 0);

if (ret != 0) {

printf("sem create fail

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值