- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程通信(WINDOWS平台 共享内存方法) FZU 030702412 陈楠 主要内容: Mutex和Semaphore区别 共享内存实现邮箱的数据结构 主要函数的实现流程 “实时”显示内容的处理与内存泄漏 可改进的地方 使用系统调用的函数列表 MUTEX和SEMAPHORE区别 在windows环境下两者有着类似之处但不完全相同。 Semaphore可以比喻成是一个银行(临界区)有N人的服务窗口(最大允许同步进程数量),如果申请的客户(进程)少于N就可以办理业务,如果客户满了,就要等待某一个客户服务的结束。 Mutex可以比喻成是一个银行只有1各服务窗口,如果客户A正在办理,那么后续客户申请时只能等待,只有当客户A办理结束离开服务窗口时,后续客户依据申请顺序逐一获得被服务的资格。 MUTEX和SEMAPHORE区别 Mutex在没有被任何线程所拥有时是有信号的,这时任何线程可以使用Wait functions去获取该对象的所有权。当Mutex被某个线程拥有后就处于没信号状态,并且只有当该线程使用ReleaseMutex释放该互斥对象时,它才能被其它线程获得。 在windows环境下一个线程中试图释放另个线程所拥有的Mutex是不会成功的,Mutex只能被所有者线程所释放。 在前面的例子中就是不允许插队。 Semaphore可以被其他进程释放 在前面的例子中就是允许插队,这样会导致超过允许服务的进程上限 共享内存实现邮箱的数据结构 由于共享内存的方法不直接提供队列功能故采用循环队列思想模拟缓冲区,下面是共享内存的头部,用来存储索引信息 struct { DWORD MsgSize; //单个消息大小:字节数 int MsgMaxCount; //消息的总数 int MsgNum; //消息的个数 int ReadIndex; //可读消息索引 int WriteIndex; //可写消息索引 }; 主要函数的实现流程 Create(进程命名,本进程标号,总共进程数,邮箱信件数,信件允许容量) 每个进程命名包括共享内存地址,读信号量名称、写信号量名称,所以是一个n*3维的字符串数组 空间大小= 索引结构+ 消息个数*消息总数 写信号量置为消息总数 读信号量置为0 主要函数的实现流程 Send(发送数据指针,发送进程号, 等待延时) 打开共享内存的指针 读取共享内存的指针 发送信号量的指针 接受信号量的指针 互斥信号量的指针 主要函数的实现流程 Receive(接受数据指针, 等待延时) 为了实时显示 “实时”显示内容的处理与内存泄漏 Read(消息数组) 这个显示消息的函数每隔50ms执行一次,所以实际上是是查询方式来实现实时显示 在此模式下可以发现一些被人遗忘的内存释放,我在实现这个函数时候发现进程占用内存和执行时间成正比,最后才发现内存泄漏的地方,尤其是读取共享内存的指针特别占内存 可改进的地方 共享内存空间除了存储索引和循环队列外,在空间的最后一块区域可以存入内存空间指针,达到动态拓展的目的,实现滑动窗口 使用系统调用的函数列表 CreateFileMapping( , , , , , ) MapViewOfFile( , , , , ) OpenFileMapping( , , ) CreateSemaphore( , , , ) OpenSemaphore( , , ) CreateMutex( , , ) OpenMutex( , , ) WaitForSingleObject( , ) ReleaseSemaphore( , , ) CloseHandle( ) UnmapViewOfFile( ) 谢谢
您可能关注的文档
- 操作系统原理方敏死锁.ppt
- 操作系统原理电子教案.ppt
- 操作系统原理第2章进程管理.ppt
- 操作系统原理第一章绪言.ppt
- 操作系统原理第二章(下).ppt
- 操作系统原理第二章操作系统的组织结构.ppt
- 操作系统原理第二章第一节.ppt
- 操作系统原理第五章处理器调度.ppt
- 操作系统原理第八章输入输出管理.ppt
- 操作系统原理第六章死锁.ppt
- 2025至2030中国壳聚糖凝胶行业运营态势与投资前景调查研究报告.docx
- 2025至2030中国射频可变衰减器行业项目调研及市场前景预测评估报告.docx
- 2025至2030中国组合机床行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030中国手游行业项目调研及市场前景预测评估报告.docx
- 2025至2030麻醉药行业投资机会及风险投资运作模式报告.docx
- 2025至2030中国电气隔离开关行业市场占有率及投资前景评估规划报告.docx
- 2025至2030中国精对苯二甲酸行业发展趋势与产业运行态势及投资规划深度研究报告.docx
- 2025至2030全球及中国工业机器人供电系统行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030中国异氟烷行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030耐高温涂料行业风险投资态势及投融资策略指引报告.docx
文档评论(0)