嵌入式OS入门笔记-以RTX为案例:八.RTX的进程间通讯(二)

本文深入介绍了嵌入式操作系统RTX中的信号量和邮箱两种进程间通信机制。信号量用于同步和资源管理,区别于互斥锁,可能引发误用。邮箱适用于大段数据传输,需要用户手动管理内存。文中通过实例详细讲解了这两种机制的使用方法。
摘要由CSDN通过智能技术生成

嵌入式OS入门笔记-以RTX为案例:八.RTX的进程间通讯(二)

 

RTX的进程间通讯主要依赖于四种机制,分别是事件(Event)互斥锁(Mutex)旗语信号量(Semaphore),和邮箱(Mailbox)。前三种机制侧重进程间的同步,邮箱则侧重进程间的数据通讯。上一篇讲了事件和互斥锁。这次讲一下信号量和邮箱。

 

1.信号量(Semaphore)

 

1.简介

信号量其实是一个很抽象的操作系统原语,它最早由荷兰计算机科学家Dijkstra提 出,用于解决多项资源的分配问题。实际上信号量的适用范围非常广,可以很好地解决很多问题。简单说来,信号量有三个部分,第一部分就是一个代币容器(一个 整形变量),记录着可用的资源数,第二部分就是取用资源(P或者proberen,尝试的荷兰语)的操作,第三个就是还回资源(V或者verhogen, 增加的荷兰语)的操作。当资源数量为0时,任何取用资源的操作都会被阻断,直到资源数量增加。刚刚接触可能会觉得跟互斥锁有点难区分,因为RTX中信号量 的相关操作跟互斥锁基本一致。先看看怎么使用RTX中的信号量。

 

类似互斥锁,首先要声明一个信号量结构体。

OS_SEM semID;


然后需要初始化。

os_sem_init (semID,unsignedtoken_count);

这里与互斥锁不同的是,你需要指定初始的资源数,token_count,可以是任意非负整数,如果是0,就意味着一开始没有资源可用。


然后当你需要取用资源时:

os_sen_wait (semID, timeout );

timeout的意义就不具体多说了,跟前面介绍的一致。如果成功取用了资源(token_count大于0),那么token_count会减一,并且返回OS_R_OK。如果token_count为0,那么就没办法取用资源,那么这个函数会返回OS_R_SEM,并且进程进入WAIT_SEM状态。

当你用完了资源,需要返回资源时,(token_count增加1):

os_sem_send (semID);

和互斥

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值