21.Linux进程间通信IPC之共享内存和信号量

Linux进程间通信IPC之共享内存和信号量


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


信号量

1.基本介绍

信号量是一种用于多线程或多进程之间同步的机制。信号量(Semaphore),是在多进程环境下使用的一种设施, 它负责协调各个进程, 以保证它们能够正确、合理地使用公共资源。信号量分为单值多值两种,单值信号量只能被一个进程获得,多值信号量后者可以被若干个进程获得。

需要包含头文件

#include <semaphore.h>
#include <sys/sem.h>

信号量可以用来保证两个或多个关键代码段不会被并发调用。

2.系统调用

可以使用sem_opensemget来创建信号量,不过这两个方法略有区别。

  • sem_open创建信号量

sem_open:用于初始化和打开一个有名信号量,它是POSIX标准中定义的函数,适用于命名信号量,可以创建新的信号量,也可以打开已存在的信号量。

sem_t *sem_cur = sem_open(SEM_NAME, O_CREAT, 0666, 1);
  • semget创建信号量

semget 用于获取System V信号量集的标识符。它是System V信号量API,较旧且不如POSIX信号量接口设计得好。可以获取已存在的信号量集的标识符,也可以创建新的信号量集。

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

System VPOSIX是两种不同的标准,用于定义操作系统接口。System V``:最早由AT&T引入,包括了消息队列、共享内存和信号量等机制。它是早期Unix系统的一部分。POSIXIEEE制定的可移植操作系统接口标准,旨在定义应用程序与操作系统之间的接口。它覆盖了更广泛的领域,包括文件操作、进程管理、线程同步等。System V在旧版本的Unix系统中广泛使用,而POSIX`是新标准,更适合跨平台开发。

  • 信号量集专属控制函数semctl
int semctl (int semid, int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值