- 16
- 0
- 约2.47万字
- 约 21页
- 2018-08-04 发布于福建
- 举报
进程共享资源信号量控制详细实现
信号量
信号量(Semaphore)简单的说就是用来控制多个进程对共享资源使用的计数器。它是常被用作一种锁定保护机制,当某个进程对资源进行操作时阻止其他进程对该资源的访问。需要注意的是,System V中的的信号量对象实际上是信号量的集合(set),它可以包含多个信号量,控制多个共享资源。
有关的数据结构
和消息队列一样,我们在介绍他的使用前先介绍一些相关的数据结构:
sem
前提提到,信号量对象实际是多个信号量的集合。在Linux系统中,这种集合是以数组的形式实现的。数组的每个成员都是一个单独的信号量,它们在系统中是以sem结构的形式存储的。Sem的结构在Linux系统linux/sem.h中定义是这样的:
/* One semaphore structure for each semaphore in the system. */
Struct sem{
Short sempid; /*pid of last operation*/
Ushort semval; /*current value*/
Ushort semncnt; /*num procs awaiting increase in semval*/
Ushort semzcnt; /*num procs awaiting semval=0*/
};
其中,
Sem_pid成员保存了最近一次操作信号量进程的pid。
Sem_semval成员保存着信号量的计数值。
Sem_semncnt成员保存着等待使用资源的进程数目。
Sem_semzcnt成员保存等待资源完全空闲的进程数目。
2.semun
Semun联合在senctl()函数中使用,提供senctl()操作所需要的信息。它在Linux系统linux/sem.h中定义是这样的:
/*arg for semctl system calls */
Union semun{
Int val; /*value for SETVAL*/
Struct semid_ds *buf; /*buffer for IPC_STATSETALL*/
Ushort *array; /*array for GETALLSETALL*/
Struct seminfo *__buf; /* buffer for IPC_INFO*/
Void *_pad;
};
前三个参数在对senctl()函数介绍中会讲到,这里暂时先不管它们。后两个参数是Linux系统所独有的,只是系统的内核中使用。
3. semuf
semuf结构被semop()函数(后面会讲到)用来定义对信号量对象的基本操作。它在linux/sem.h中是这样定义的:
/*semop system calls takes an array of these.*/
Stcuct sembuf{
Unsigned short sem_num; /*semaphore index in array*/
Short sem_op; /*semaphore operation*/
Short sem_flg; /*operation flags*/
};
其中,
Sem_num 成员为接受操作的信号量在信号量数组中的序号(数组下标)。
Sem_op成员定义了进行的操作(可以是正,负和零)。
Sem_flg是控制操作行为的标志。
如果sem_op是负值,就从指定的信号量中减去相应的值。这对应着获取信号量所监控
的资源操作。如果没有sem_flg指定IPC_NOWAIT标志,那么,当现有的信号量数值小于sem_op的绝对值(表示现有的资源少于要获取的资源)时,调用semop()_函数的进程就会被阻塞知道信号量的数值大于sem_op的绝对值(表示有足够的资源被释放)。
如果sem_op是正值,就在指定的信号量中加上相应的值。这对应着释放信号量所监控
的资源 操作。
如果sem_op是零,那么调用semop()函数的进程就会被阻塞到直对应的信号量值为零。
这种操作的实质就是等待信号量所监控的资源被全部使用。利用这种资源操作可以动态监控资源的使用并调整资源的分配,避免不必要的等待。
您可能关注的文档
- 身价最高十大火辣女星.doc
- 身后眼睛。落花枝头。秋祭。活着祖先.ppt
- 身边服务才是共享经济未来.docx
- 车主必看新车贴膜5大弊端5大陷阱全揭秘.doc
- 身体各部位正确锻炼方法.docx
- 车主最爱汽车坐垫.docx
- 践行党群众路线群众路线教育实践活动PPT宣讲稿.ppt
- 身份证号码前6位代表意义.doc
- 车位停车场车位控制PLC课程的设计.doc
- 躺车的设计的资料汇总.doc
- 浙江省温州市2024-2025学年七年级上学期语文期末考查卷.docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(原卷版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(解析版).docx
- 精品解析:北京市海淀区2025-2026学年九年级上学期期末语文试题(解析版).docx
- 精品解析:北京市东城区汇文中学2025-2026学年八年级上学期期中语文试题(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(原卷版).docx
- 精品解析:2024-2025学年广东省广州市从化区街口镇中心小学人教版五年级上册期中测试数学试卷(解析版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(解析版).docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(解析版).docx
原创力文档

文档评论(0)