信号量:就是控制某个进程能够对某个资源进行访问;
保证同一时刻只能由一个进程对 某个资源进程访问;
信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目, 获取资源时,需要对信号量的值进行原子减一,该操作被称为 P 操作。当信号量值为 0 时,代表没有资源可用, P 操作会阻塞。释放资源时,需要对信号量的值进行原子加一,该操作被称为V操作。信号量主要用来同步进程。 信号量的值如果只取 0,1, 将其称为二值信号量。如果信号量的值大于1,则称之为计数信号量。 注意:正数值; 加一减一是一个原子操作;
临界资源:同一时刻,只允许被一个进程或者线程访问的资源;
临界区:访问临界资源的代码段;
信号量接口介绍
(1)semget
int semget(key_t key,int nsems,int semflg);
创建或者获取一个已经存在的信号量;
key:两个进程使用相同的key值,就可以使用同一个信号量;
2.nsems:创建几个信号量;
semflg:标志位;
如果为创建:IPC_CREAT;
如果为全新创建,也就是不知道是否有人创建过,则IPC_CREATE|IPC_EXCEL,就是如果没 有则创建,如果有则创建失败 ;
(2)semop:
int semop(int semid,struct sembuf *sops,unsigned nsops);
对信号量进行改变,做P操作或者V操作;
semid:信号量的id号,也就