【Linux】POSIX信号量

前言

在这里插入图片描述

一. 信号量的理解

我们先举个例子来引入信号量的概念

我们如果想看电影,需要先买票,那么当我们买了票以后,那么相对应的电影院的座位就是属于我们的了,并且没有人能再占用。而共享资源就像电影院的座位一样,如果我们需要,我们需要申请占用一旦我们申请成功,那么我们就一定可以获得,就像一定可以坐上电影院的座位一样。

而当我们将电影院变成私人电影院时,只有一个位子,只要有人预约了,那么其他人就不能预约了,只能等这个人看完电影,归还座位的使用权时,其他人才能预约。这不就达到了互斥了吗

所以,信号量本质就是类似于一个计数器,描述资源数量的计数器,如同电影院的座位数,只要有人申请成功计数器就-1,直到没有座位,计数器为0时不能再申请;而当一个进程访问完共享资源,归还时计数器再+1,可以再有别人申请。

代码就会变成这样
在这里插入图片描述
我们将申请信号量的操作叫做P操作,释放信号量的操作叫做V操作
而信号量是协和进程间通信的,所以多个进程都需要看得到同一个计数器,同一个信号量,这不就和共享内存和消息队列中,让不同进程看见同一份资源一样吗。所以信号量也属于System V的进程间通信。

而互斥的实现就是,信号量初始为1一旦申请就减为0,之后的进程无法申请,只有当申请到的进程归还资源信号量+1,才能被其他进程申请,这就是互斥的实现

二. 信号量的使用

初始化信号量

#include<semaphore.h>
int sem_init(sem_t*sem,int pshared,unsigned int value)

参数:
sem:信号量的地址
pshared:传0代表线程间共享,非0表示进程间共享
value:信号量的初始值

销毁信号量

int sem_destroy(sem_t *sem);

等待信号量

等待信号量,会将信号量的值减1,代表申请到信号量,为P操作

int sem_wait(sem_t *sem);

发布信号量

发布信号量,表示资源使用完毕,将信号量值加1,为V操作

int sem_post(sem_t*sem);

结束语

感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值