【Linux】POSIX信号量

前言

【Linux】POSIX信号量_第1张图片

文章目录

  • 前言
  • 一. 信号量的理解
  • 二. 信号量的使用
  • 结束语

一. 信号量的理解

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

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

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

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

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

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

二. 信号量的使用

初始化信号量

#include
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);

结束语

感谢你的阅读

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

你可能感兴趣的:(Linux学习笔记,linux,运维,服务器)