一、信号量:(数据操作锁)控制进程间互斥、同步等,协调多个程序同时访问一个共享资源。
工作原理:信号量只能有两种操作等待和操作,即:P V操作,必须是原子操作。
P(sv):如果 sv 的值大于零就减一;如果它的值为零,就挂起;
V(sv):如果有被挂起的,恢复运行,如果没有就加一。
二、函数原型:
int semget(key_t key, int nsems,int semflg);
int semop(int semid,struct sembuf *sops,size_t nsops);
int semctl(int semid, int semnum, int cmd, ...);
/*
* semid:信号量集的标识符; semnum:第几个信号量;
* cmd:需要执行的命令,根据命令的不同,函数有三个或四个参数(union)
*/
cmd:IPC_RMID,立即删除信号集,唤醒被阻塞的进程;
cmd:SETVAL,设置信号量集中的一个单独的信号量的值。
cmd:GETALL用于读取信号量集中的所有信号量的值。
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
struct seminfo *_buf;
};//用户需自己定义声明
三、代码实现:
四、实现结果:
原文地址:http://green906.blog.51cto.com/10697569/1765467