linux 信号量、共享内存、和消息队列

本文介绍了Linux系统中的信号量机制,包括semget、semop和semctl函数的使用。semget用于创建或获取信号量,semop用于改变信号量值,semctl用于初始化或删除信号量。信号量通过key值协调多进程间的资源访问,sembuf结构体定义了信号量操作。
摘要由CSDN通过智能技术生成

Linux的信号量机制

#include<sys/sem.h>

int semctl(int sem_id , int sem_num , int command , ...);

int semget(key_t key , int num_set , int sem_flags);

int semop(int sem_id struct sembuf *sem_ops , size_t num_sem_ops);

头文件sys/sem.h通常依赖于另外两个有文件sys/types.h和sys/ipc.h。一般情况下,他们会被sys/sem.h自动包含,因此不需要为它们明确添加相应的#include语句。

参数key的作用很像一个文件名,它代表程序可能要使用的某个资源,如果多个程序使用相同的key值,它将负责协调工作。

1.semget函数

semget函数的作用是创建一个新信号量或取得一个已有信号量的键:

int semget(key_t key , int num_set , int sem_flags);

第一个参数是整数值,不相关的进程可以通过它访问同一个信号量。只有semget函数才直接使用信号量键,所有其他的信号量函数都是使用有semget函数返回的信号量标识符。

num_sems指定需要的信号量的数目,它几乎总是取值为1。

sem_flags参数是一组标志,它与open函数的标志非常相识。

2.semop函数

semop函数用于改变信号量的值,它的定义如下所示:

int semop(int sem_id , struct sembuf *sem_ops , size_t num_sem_ops);

第一个参数sem_id是由semget返回的信号量标识符。第二个参数sem_ops是指向一个结构数组的指针,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值