Linux进程间通信IPC之共享内存和信号量
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
信号量
1.基本介绍
信号量是一种用于多线程或多进程之间同步的机制。信号量(Semaphore)
,是在多进程环境下使用的一种设施, 它负责协调各个进程, 以保证它们能够正确、合理地使用公共资源。信号量分为单值
和多值
两种,单值信号量
只能被一个进程获得,多值信号量
后者可以被若干个进程获得。
需要包含头文件
#include <semaphore.h>
#include <sys/sem.h>
信号量可以用来保证两个或多个关键代码段不会被并发调用。
2.系统调用
可以使用sem_open
和 semget
来创建信号量,不过这两个方法略有区别。
- 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 V
和POSIX
是两种不同的标准,用于定义操作系统接口。System V``:最早由
AT&T引入,包括了消息队列、共享内存和信号量等机制。它是早期
Unix系统的一部分。
POSIX是
IEEE制定的可移植操作系统接口标准,旨在定义应用程序与操作系统之间的接口。它覆盖了更广泛的领域,包括文件操作、进程管理、线程同步等。
System V在旧版本的
Unix系统中广泛使用,而
POSIX`是新标准,更适合跨平台开发。
- 信号量集专属控制函数
semctl
int semctl (int semid, int