标签:uc
1. 基本特点
1) 相当于计数器,用于限制多个进程对有限共享资源的访问。
2) 多个进程获取有限共享资源的操作模式
A. 测试控制该资源的信号量;
B. 若信号量大于0,则进程可以使用该资源, 为了表示此进程已获得该资源,需将信号量减1;
C. 若信号量等于0,则进程休眠等待该资源, 直到信号量大于0,进程被唤醒,执行步骤A;
D. 当某进程不再使用该资源时,信号量增1, 正在休眠等待该资源的其它进程将被唤醒。
2. 常用函数
1) 创建/获取信号量
int semget (key_t key, int nsems, int semflg);
A. 该函数以key参数为键值创建一个信号量集合 (nsems参数表示集合中的信号量数 ,或获取已有的信号量集合(nsems取0)。
B. semflg取值:
2) 操作信号量
int semop (int semid, struct sembuf* sops,unsigned nsops);<span style="font-family: 宋体; font-size: 12px;"> </span>
struct sembuf { unsigned short sem_num; // 信号量下标 short sem_op; // 操作数 short sem_flg; // 操作标记 };
A. 该函数对semid参数所标识的信号量集合中, 由sops参数所指向的包含nsops个元素的, 结构体数组中的每个元素,依次执行如下操作:
a) 若sem_op大于0, 则将其加到第sem_num个信号量的计数值上,以表示对资源的释放;
b) 若sem_op小于0,则从第sem_num个信号量的计数值中减去其绝对值,以表示对资源的获取;
c) 若第sem_num个信号量的计数值不够减(信号量不能为负), 则此函数会阻塞,直到该信号量够减为止,以表示对资源的等待;
d) 若sem_flg包含IPC_NOWAIT位,则当第sem_num个信号量的计数值不够减时, 此函数不会阻塞,而是返回-1,errno为EAGAIN,以便在等待资源的同时还可做其它处理;
e) 若sem_op等于0,则直到第sem_num个信号量的计数值为0时才返回, 除非sem_flg包含IPC_NOWAIT位。
B. 成功返回0,失败返回-1。
3) 销毁/控制信号量
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/meetings/article/details/47191957
标签:uc
原文地址:http://blog.csdn.net/meetings/article/details/47191957