Vxworks中不同信号量的作用

1.semCCreate创建并初始化一个计数信号量

函数原型:

SEM_ID semCCreate
(
    int options,       /* semaphore option modes */
    int initialCount   /* initial count */
)    
options选项:
SEM_Q_PRIORITY 基于优先级的,即优先级高的优先执行;
SEM_Q_FIFO 基于队列形式的,先进先执行;
initialCount   初始化一般设置为SEM_EMPTY(0)或者SEM_FULL(1);如果设置为0则代表在不SemGive()的情况下不可用,设置为1表示在不SemGive()的情况可以使用一次。
该信号量适用于任务间通信或者通知使用,俩个任务处于依赖关系执行的情况。比如网络接受任务和我数据处理任务,每接收一包数据通知处理该数据的任务去处理数据。如果处理任务比较慢,那么该信号量会记住接收到的数据包,直到处理完成才会清空计数。一次可以连续SemGive出多个信号。
2.semMCreate创建并初始化一个互斥锁信号量
函数原型:
SEM_ID semMCreate
(
    int options   /* mutex semaphore options */
)     
options选项:
SEM_Q_PRIORITY (0x1)基于优先级的,即优先级高的优先执行
SEM_Q_FIFO 基于队列形式的,先进先执行;
SEM_DELETE_SAFE (0x4)
SEM_INVERSION_SAFE (0x8)
SEM_EVENTSEND_ERR_NOTIFY (0x10)
SEM_INTERRUPTIBLE (0x20)
该信号量适用于同一个函数被多个任务调用,但是如果同时调用的过程中可能发生冲突,使用该互斥信号量进行保护,例如出啊口或者网络发送数据函数等。
3.semBCreate创建并初始化一个二进制信号量

函数原型:

SEM_ID semBCreate
(
    int         options,       /* semaphore options */
    SEM_B_STATE initialState   /* initial semaphore state */
)  
options选项:
SEM_Q_PRIORITY 基于优先级的,即优先级高的优先执行;
SEM_Q_FIFO 基于队列形式的,先进先执行;
initialCount   初始化一般设置为SEM_EMPTY(0)或者SEM_FULL(1);如果设置为0则代表在不SemGive()的情况下不可用,设置为1表示在不SemGive()的情况可以使用一次。
适用于实时性同步的俩个任务之间通信,A任务做某个动作,此时B任务也需要做某个动作,但在B没有及时做该动作不要求之后再继续做的情况下,使用该信号量。一次只能SemGive一个信号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值