进程共享资源信号量控制详细实现(源码及解释)

进程共享资源信号量控制详细实现(源码及解释)

ID:20363438

大小:161.50 KB

页数:21页

时间:2018-10-11

进程共享资源信号量控制详细实现(源码及解释)_第1页
进程共享资源信号量控制详细实现(源码及解释)_第2页
进程共享资源信号量控制详细实现(源码及解释)_第3页
进程共享资源信号量控制详细实现(源码及解释)_第4页
进程共享资源信号量控制详细实现(源码及解释)_第5页
资源描述:

《进程共享资源信号量控制详细实现(源码及解释)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、信号量信号量(Semaphore)简单的说就是用来控制多个进程对共享资源使用的计数器。它是常被用作一种锁定保护机制,当某个进程对资源进行操作时阻止其他进程对该资源的访问。需要注意的是,SystemV中的的信号量对象实际上是信号量的集合(set),它可以包含多个信号量,控制多个共享资源。有关的数据结构和消息队列一样,我们在介绍他的使用前先介绍一些相关的数据结构:1.sem前提提到,信号量对象实际是多个信号量的集合。在Linux系统中,这种集合是以数组的形式实现的。数组的每个成员都是一个单独的信号量,它们在系统中是以sem结构的形式存储

2、的。Sem的结构在Linux系统linux/sem.h中定义是这样的:/*Onesemaphorestructureforeachsemaphoreinthesystem.*/Structsem{Shortsempid;/*pidoflastoperation*/Ushortsemval;/*currentvalue*/Ushortsemncnt;/*numprocsawaitingincreaseinsemval*/Ushortsemzcnt;/*numprocsawaitingsemval=0*/};其中,Sem_pid成员保存

3、了最近一次操作信号量进程的pid。Sem_semval成员保存着信号量的计数值。Sem_semncnt成员保存着等待使用资源的进程数目。Sem_semzcnt成员保存等待资源完全空闲的进程数目。2.semunSemun联合在senctl()函数中使用,提供senctl()操作所需要的信息。它在Linux系统linux/sem.h中定义是这样的:/*argforsemctlsystemcalls*/Unionsemun{Intval;/*valueforSETVAL*/Structsemid_ds*buf;/*bufferforIPC

4、_STAT&SETALL*/Ushort*array;/*arrayforGETALL&SETALL*/Structseminfo*__buf;/*bufferforIPC_INFO*/Void*_pad;};前三个参数在对senctl()函数介绍中会讲到,这里暂时先不管它们。后两个参数是Linux系统所独有的,只是系统的内核中使用。3.semufsemuf结构被semop()函数(后面会讲到)用来定义对信号量对象的基本操作。它在linux/sem.h中是这样定义的:/*semopsystemcallstakesanarrayoft

5、hese.*/Stcuctsembuf{Unsignedshortsem_num;/*semaphoreindexinarray*/Shortsem_op;/*semaphoreoperation*/Shortsem_flg;/*operationflags*/};其中,Sem_num成员为接受操作的信号量在信号量数组中的序号(数组下标)。Sem_op成员定义了进行的操作(可以是正,负和零)。Sem_flg是控制操作行为的标志。如果sem_op是负值,就从指定的信号量中减去相应的值。这对应着获取信号量所监控的资源操作。如果没有sem

6、_flg指定IPC_NOWAIT标志,那么,当现有的信号量数值小于sem_op的绝对值(表示现有的资源少于要获取的资源)时,调用semop()_函数的进程就会被阻塞知道信号量的数值大于sem_op的绝对值(表示有足够的资源被释放)。如果sem_op是正值,就在指定的信号量中加上相应的值。这对应着释放信号量所监控的资源操作。如果sem_op是零,那么调用semop()函数的进程就会被阻塞到直对应的信号量值为零。这种操作的实质就是等待信号量所监控的资源被全部使用。利用这种资源操作可以动态监控资源的使用并调整资源的分配,避免不必要的等待。

7、4.Semid_qs和msgqid_ds类似,semid_qs结构被系统用来存储每个信号量对象的有关信息。它在Linux系统库linux/sem.h中是这样定义的:/*Onesemiddatastructureforeachsetofsemaphoresinthesystem*/Structsemid_ds{Structipc_permsem_perm;/*permissions..seeipc.h*/__kernel_time_tsem_otime;/*tastsemoptime*/__kernel_time_tsem_ctime

8、;/*lastchangetime*/Structsem*sem_base;/*ptrtofirstsemaphoreinarray*/Structsem_queue*sem_pending;/*pendingoprationstob

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。