信号量的原理及使用场景

信号量的原理
信号量就是通过一个信号量来控制多线程的访问共享资源,如果信号量是2值,他就是一个互斥锁
如果是3,4值,就可以是红绿灯,可以控制哪一路线程执行什么操作;
高铁里厕所,是2值信号量,有人进去就锁上锁,出来就释放锁
停车场的停车,有3个车位,停车场,闸机,一辆车进去的时候,信号量间1,有车出来就信号量加1,等没有车出来,第三辆车进去的时候,信号量为0,无法停进去

int os_sem_create(OS_SEM *, int);

/* --------------------------------------------------------------------------*/
/**

  • @brief :非阻塞方式查询信号量
  • @Param sem :信号量
  • @Returns :错误码
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_accept(OS_SEM *);

/* --------------------------------------------------------------------------*/
/**

  • @brief :阻塞方式获取信号量
  • @Param sem:信号量
  • @Param timeout:等待时长,0表示一直等待
  • @Returns :错误码
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_pend(OS_SEM *, int timeout);

/* --------------------------------------------------------------------------*/
/**

  • @brief :发送信号量
  • @Param sem:信号量
  • @Returns :错误码
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_post(OS_SEM *);

/* --------------------------------------------------------------------------*/
/**

  • @brief :信号量删除
  • @Param sem:信号量
  • @Param block:保留
  • @Returns :错误码
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_del(OS_SEM *, int block);

/* --------------------------------------------------------------------------*/
/**

  • @brief :信号量设置
  • @Param sem:信号量
  • @Param cnt:计数值
  • @Returns :错误码
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_set(OS_SEM *, u16 cnt);

/* --------------------------------------------------------------------------*/
/**

  • @brief :信号量类型是否queueQUEUE_TYPE_COUNTING_SEMAPHORE
  • @Param : true:信号量匹配, fail:信号量不匹配
  • @Returns :错误码
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_valid(OS_SEM *);

/* --------------------------------------------------------------------------*/
/**

  • @brief :判断信号量是否可用
  • @Param sem:信号量
  • @Returns :可用数量
    /
    /
    ----------------------------------------------------------------------------*/
    int os_sem_query(OS_SEM *);

信号量的使用场景

所以程序开发的时候,什么场景使用信号量呢????欢迎补充

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值