- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信号量(semaphore)Kless0329 (实现同步)
一种是系统调用,一种是调用linux库函数
信号量实现同步:
A B两个程序打印AA BB 使每一次都连着打印A或B 只需一对信号量val= 1 A(p(0),v(0)) B(p(0),v(0)) p(0):是对val值为0的信号量进行p操作
AB两个程序进行读写同步,A写一个,B读一个,需要两对信号量(val= 1和val = 0,A( p(1),v(0) ) B( p(0),v(1) ) )
系统调用(2) sys/sem.h
创建信号量(semget),成功后设置信号量的值(semctl) == 另一个进程获取信号量
进行pv操作(semop)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
通过key获取semid
pv 操作就是对senbuf 里面的内容进行改动sem_num 只有一个,所以下标就是0
删除时是删除信号量集
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
删除信号量(semctl)
注意:删除操作必须在pv操作结束后进行(与共享内存对比)
只需删除一次,不论在哪个进程中删除都可以
1、创建
2、操作
3、删除
二、调用库函数(3) semaphore.h
value :信号量的初始化值
和大多数linux函数一样,这些函数成功是返回0,失败时返回-1
命令删除
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如果
Pv操作中
Struct sembuf buf;
Buf.sem_flg = SEM_UNDO; // SEM_NOWAIT 不赋值就会在程序结束后系统自动删掉
(如果将pv操作中的Buf.sem_flg = SEM_UNDO;
则必须在完成各种操作之后删除,因为如果不删除,程序结束后,系统不会自动
共享内存 kless0402 (实现进程间的通信(IPC) 有三个:管道,信号,共享内存)
系统调用(2) sys/shm.h
每个进程都有自己的逻辑地址
共享内存:一个物理内存被多个进程来访问
目的:是用来进行进程之间通信,(信号,共享内存,管道)
创建:专门开辟一个某个大小的内存,用来作为共享内存
达到共享内存需要的函数
Shmget: 全新创建,或是获取
Shmat: 将共享内存映射到某个进程 shm_addr = NULL 原因:该进程的某个位置,让他自动判断,因为和硬件关联度大
Shmdt: 断开,使内存不映射到该进程
Shmctl: “删除内存” cmd = IPC_RMID (可以在断开之前删除,与信号量对比)
5、只需删除一次
(可以在断开之前删除)
若程序结束后,未删除,系统不会自动删除
7、不断开,会自动断开,但不会删除,不论在那个映射的进程中删除都可以
8、linux服务器中,我用命令ipcs 去查看时,看到如下数据key shmid owner perms bytes nattch statusox00 3501612 root 600 384 destox00 3501613 apache 666 10000 0
dest 表示共享内存段已经被删除,但是仍然有程序在连接着它“status栏中列出当前共享内存的状态,当该段内存的mode字段设置了SHM_DEST位时就会显示dest字样,当用户调用shmctl的IPC_RMID时,内核首先看有多少个进程还和这段内存关联着,如果关联数为0,就会销毁(释放)这段内存,否则就设置这段内存的mode位SHM_DEST,”
2、映射(shmat())
3、删除(shmctl())(可将buf置为NULL
您可能关注的文档
- 伤仲永[语文版七上].ppt
- 2016年度上半年度个人工作总结范文十二篇.doc
- 2016年度下学期信息技术教研组工作计划.doc
- 位一报表集成管理系统介绍V1-1.ppt
- 2016年度东阿镇中心幼儿园食品安全宣传周活动总结.doc
- 低碳生活-党课201005.ppt
- 2016年度个人工作计划范文.doc
- 住房公积金基础知识[2].ppt
- 2016年度个人年度终总结开头语.doc
- 体味文化[上课用].ppt
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
文档评论(0)