并发程序设计(续)

编程入门 行业动态 更新时间:2024-10-27 08:35:40

并发<a href=https://www.elefans.com/category/jswz/34/1771020.html style=程序设计(续)"/>

并发程序设计(续)

十二、共享内存

一、内存映射的基本使用

(一)内存映射的概念

1、共享内存的概念

1)使用一个磁盘文件与内存中的一个缓冲区映射

2)可以像访问普通内存一样对文件访问

3)不需要read,write函数

2、优点

使用内存映射后:

1)访问硬碟磁盘是毫秒级别,访问内存是纳秒级别,可以提高访问效率,差距很大,提高速度

2)文件的映射可以是一部分

(二)内存映射使用

1、mmap函数

参数:

1)addr:要映射的内存,一般为空,os自动选择合适的(内存管理一般是os来做,程序员不干预)

2)length:从头开始,映射多大

3)prot:共享内存访问权限,可读,可写,可执行,不可访问

4)flags:属性

进程间通讯必选共享的

在访问动态链接库,动态内存空间时,一个进程频繁的操作内存空间,也可以用内存映射,防止多次写磁盘

匿名管道参数:血缘关系进程

         

5)fd:映射文件,匿名-1

6)offset:文件偏移,一般从头0开始

2、mmap函数返回值:成功返回映射区首地址

3、代码实现:

1、读操作

2、写操作

1)通过代码写入磁盘

2)直接在test文件中写

(三)内存映射注意事项

1、映射区权限<=文件的打开权限

只读打开:

读写映射:

报错:

解决:增加文件权限

2、总线错误

映射文件的大小必须大于0

touch了原始文件test后,需要在test用空格敲出大小,如果不写,映射文件的大小为0,总线错误会乱码

文件大小大于7,可以写入数据:

2、如果是私有操作,不会写入磁盘

二、内存映射使用注意事项

1、在创建映射区时,包含一次对映射区的写操作

2、对于私有权限

读操作可以:

写操作不行:不会保存到磁盘中

3、映射之前关闭文件,不能正确读写

映射成功后,关闭文件可以进行正常的读-写

4、映射的文件大小不能为0(空格),总线错误,指定0大小的创建映射区,非法参数

5、

6、映射位置必须从4的整数倍开始,因为内存分配是按页

非法参数:

7、申请内存超过4k会报错

1)申请2k,访问3k可以 

2)申请2k,访问5k报错(超过4k)

8、

三、内存映射实现进程间的通信

1、写函数

2、读函数

实验结果

4、匿名映射-血缘进程

5、释放内存

四、systemV共享内存

(一)SYSTEM V概念

(二)使用步骤

1、IPC是进程间通信的缩写

更多推荐

并发程序设计(续)

本文发布于:2023-12-07 03:13:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1669905.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:程序设计

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!