网站大量收购独家精品文档,联系QQ:2885784924

嵌入式系统电子课件-6.3 信号量.pptx

嵌入式系统电子课件-6.3 信号量.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

信号量

信号量为了防止出现多个程序同时访问一个共享资源而引发的问题,需要采取一种机制,使得在任一时刻,只有一个进程可以访问到临界区域,即信号量机制信号量分类二进制信号量(二元信号量):取值为0、1通用信号量:取值可为0或任意正整数。

P操作:如果信号量的值大于0,就给它减1;如果信号量的值等于0,就挂起该进程的执行。PV操作V操作:如果有其他进程因等待信号量而被挂起,就让它恢复运行;如果没有进程因等待信号量而挂起,就给它加1。

可以这样看待信号量sv:当临界区可用时,信号量sv的值是true,然后P(sv)操作将它减1,使它变为false以表示临界区域正在被使用;当进程离开临界区域时,使用V(st)操作将它加1,使临界区域可以再被使用。信号量与一般变量对普通变量进行加减是不行的,因为在c/c++等语言中,没有一个原子操作可以完成变量检测和加减的功能。

以下几个函数用于处理信号量操作#includesys/types.h#includesys/ipc.h#includesys/sem.hintsemctl(intsem_id,intsem_num,intcommand,…);intsemget(key_tkey,intnum_sems,intsem_flags);intsemop(intsem_id,structsembuf*sem_ops,size_tnum_sem_ops);信号量处理函数

以下几个函数用于处理信号量操作#includesys/types.h#includesys/ipc.h#includesys/sem.hintsemctl(intsem_id,intsem_num,intcommand,…);intsemget(key_tkey,intnum_sems,intsem_flags);intsemop(intsem_id,structsembuf*sem_ops,size_tnum_sem_ops);信号量处理函数这些函数可以用来处理一组信号量,但是大多数情况下,一个信号量就够用了。

0101semget函数该函数的作用是创建一个新信号量,或取得一个已有信号量。key:整数值。不相关的进程可以通过它来访问同一个信号量。程序对信号量的访问都是间接的,它先提供一个键,再由系统生成一个信号量标识符,其他函数都通过semget函数返回信号量标识符。intsemget(key_tkey,intnum_sems,intsem_flags);

0101semget函数(续)该函数的作用是创建一个新信号量,或取得一个已有信号量。num_sems:整数值。需要的信号量数目,一般总是1.sem_flags:一组标志,代表该信号量的权限。IPC_CREAT表示创建一个新的信号量(即使对应键已经创建了信号量,也不会错误),可以和权限位按位或。intsemget(key_tkey,intnum_sems,intsem_flags);

intsemop(intsem_id,structsem_buf*sem_ops,size_tnum_sem_ops);0102semop函数该函数的作用是改变信号量的值sem_id:由semget返回的信号量标识符。sem_ops:指向一个结构数组的指针,该结构描述了信号量操作情况num_sem_ops:上述结构数组中元素的个数。structsembuf{ shortsem_num; //信号量编号,如果不使用一组信号量,则取 值一般为0 shortsem_op; //一次操作中希望改变的值,可以为-1,即P 操作,也可以为1,即V操作 shortsem_flg; //通常设为SEM_UNDO,指示操作系统将跟 踪当 前进程对这个信号量的修改情况,如果 这个进程没有释放信号量即终止,那么操作 系统将自动释放该进程持有的信号量。}

0103semctl函数该函数允许直接控制信号该函数允许直接控制信号量信息。sem_id:信号量标识符sem_num:信号量编号,如果只有一个信号量,取值为0.command:SETVAL:信号量初始化为val值(下页)。IPC_RMID:删除不再使用的信号量。intsemctl(intsem_id,intsem_num,intcommand,…);

0103semctl函数该函数允许直接控制信号该函数允许直接控制信号量信息。如果存在第四个参数,将会是一个unionsemun结构。这个需要程序员自己定义。unionsemun{ int

文档评论(0)

yzs890305 + 关注
实名认证
内容提供者

计算机二级持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年11月02日上传了计算机二级

1亿VIP精品文档

相关文档