进程间通信—信号量

本文详细介绍了Linux环境下信号量的概念及其作用,包括信号量的原子操作(P、V操作)、类型(二值信号量和计数信号量)、临界资源和临界区的定义。同时,讲解了信号量的接口函数semget、semop和semctl的使用,如创建、操作和控制信号量,并给出了示例代码。最后提到了用于检查和管理信号量的命令ipcs和ipcrm。
摘要由CSDN通过智能技术生成

信号量:就是控制某个进程能够对某个资源进行访问;

保证同一时刻只能由一个进程对 某个资源进程访问;

信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目, 获取资源时,需要对信号量的值进行原子减一,该操作被称为 P 操作。当信号量值为 0 时,代表没有资源可用, P 操作会阻塞。释放资源时,需要对信号量的值进行原子加一,该操作被称为V操作。信号量主要用来同步进程。 信号量的值如果只取 0,1, 将其称为二值信号量。如果信号量的值大于1,则称之为计数信号量。 注意:正数值; 加一减一是一个原子操作;

临界资源:同一时刻,只允许被一个进程或者线程访问的资源;

临界区:访问临界资源的代码段; 

信号量接口介绍

(1)semget

int semget(key_t key,int nsems,int semflg);

创建或者获取一个已经存在的信号量;

key:两个进程使用相同的key值,就可以使用同一个信号量;

2.nsems:创建几个信号量;

semflg:标志位;

如果为创建:IPC_CREAT;

如果为全新创建,也就是不知道是否有人创建过,则IPC_CREATE|IPC_EXCEL,就是如果没 有则创建,如果有则创建失败 ;

(2)semop:

int semop(int semid,struct sembuf *sops,unsigned nsops);

对信号量进行改变,做P操作或者V操作;

semid:信号量的id号,也就

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值