进程间通信(十三)——System V 信号量

本文介绍了System V信号量的基本概念,包括其作为进程间同步机制的作用,信号量的分类及其与共享资源的关系。重点讲解了如何使用System V信号量的API,如semget、semop和semctl,并详细阐述了信号量的P/V操作,以及在实际使用中的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

System V 信号量

信号量的基本概念

什么是信号量

  • 英文:semaphore,简称SEM,主要用来进程间同步
  • 本质:内核维护的一个正整数,可对其进行各种操作+/-操作
  • 分类:system V信号量、POSIX有名信号量、POSIX无名信号量
  • 用途:用来标识系统中可用的共享资源的个数,协调各进程有序地使用这些资源,防止发送冲突
  • 信号量类似酒店房间的房卡,房间资源是有限的、房卡也是有限的
  • P操作:程序在进入临界区之前要先对资源进行申请
  • V操作:程序离开临界区后要释放相应的资源,如房卡交给房东

通信原理

  • 类似于房卡,不是单个值,而是一组(实际上是数组)信号量元素构成
  • 将信号量设置成一个绝对值
  • 在信号量当前值的基础上加上一个数量
  • 在信号量当前值的基础上减去一个数量,降到0以下可能会引起阻塞
  • 阻塞进程一直等待其他进程修改信号量的值,直到恢复正常运行
  • 信号量本身无意义,通常会与一块临界资源(如共享内存) 关联使用

使用system V 信号量

相关API

  • 获取信号量ID:int semget(key_t key, int nsems, int semflg);
  • P/V操作:int semop(int semid, struct sembuf *sops, size_t nsops);
    • 操作术语</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值