信号量通讯编程

本文详细介绍了信号量管理的两种核心函数semget和semop的使用方法,包括其功能、参数说明以及如何利用它们进行信号量控制与同步编程。重点通过生产者消费者问题示例,展示了信号量在解决并发控制中的应用。

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

8.1创建/打开信号量集合

8.1.1 函数名

semget

8.1.2 函数原形

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

8.1.3 函数功能

1.获取信号量集合标识符

2.当key所指定的信号量不存在的时候,并且semflg里面包含了IPC_CREAT,这个时候,就会创建一个信号量集合

8.1.4 所属头文件

<sys/types.h> <sys/ipc.h><sys/sem.h>

8.1.5 返回值

成功:返回信号量集合标识符  失败:返回-1

8.1.6 参数说明

key:键值

semflg:标志,可以取IPC_CREAT,来创建一个信号量

nsems:创建的这个信号量集合里面包含的信号量数目

8.1.7 键值介绍

1.键值key是标明信号量的,利用这个键值可以找到信号量,即使不打开信号量,该信号量也存在键值;

2.和文件类似,每个文件都有一个文件名,每个进程要打开文件的时候,需要知道该文件名,然后利用该文件名打开文件。

3.标识符和文件Id(fd)都是在打开文件后才会产生



8.2操作信号量(获取信号量)

8.2.1 函数名

semop

8.2.2 函数原形

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

8.2.3 函数功能

操作信号量集合里面的信号量

8.2.4 所属头文件

<sys/types.h> <sys/ipc.h><sys/sem.h>

8.2.5 返回值

成功:返回0  失败:-1

8.2.6 参数说明

semid:要操作的信号量的标识符

nsops:要操作多少个信号量

sops:对信号量执行什么样的操作,结构体如下:


sem_num:信号量编号,0:操作第一个信号量;1:操作第2个信号量

sem_op:信号量操作符 (正数(1)表示加1,释放该信号量,负数(-1)表示减1,获取该信号量),  这样获取进程的值为0;

在程序前面必须用semcnl()函数设置信号量初始值semval为1,否则如果信号量初始值semval还可能为2、3等等,那么就不能按要求释放和获取信号量了。

sem_flg:信号量操作标志


8.2.7公示栏问题程序化


2.利用信号量控制公示板



8.2.8信号同步编程

生产者消费者问题










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值