210305设计共享内存
目录
- 一、学习的知识点
- 共享内存的设计
- 共享内存 的头部信息
- 共享内存的属性
- 共享内存类
- 共享内存类的构造函数
- 二、上课没有听懂或者没有理解的地方
- 三、当天学习的收获
一、学习的知识点
共享内存的作用:
- 进程间传递数据
- 数据量多时 起缓冲作用 应设计为先进先出
共享内存的设计
头部信息放到共享内存中 是为了方便 另一个进程 对 共享内存中数据的读写
共享内存 的头部信息
typedef struct shmhead
{int blkssize;//每块多大int blocks;//一共有多少块int wr_index;//写到哪个位置int rd_index;//读到哪个位置
}SHMHEAD_T;
共享内存的属性
typedef struct shmfifo
{SHMHEAD_T* shm_head; //头部信息int shmkey;int shmid; //共享内存idint sem_mutex; //互斥锁int sem_full;// 生产者 最开始有多少个空位置(一共几块)int sem_empty; //消费者 最开始为0char* payload;//实际存数据的地址}SHMFIFO_T;
共享内存类
class shmFIFO
{public:shmFIFO(int key,int blksize,int blocks);void shmfifo_put(char* buf);void shmfifo_get(char* buf);private:int key_;int blksize_;int blocks_;SHMFIFO_T* fifo;
};
共享内存类的构造函数
shmFIFO::shmFIFO(int key, int blksize, int blocks):key_(key),blksize_(blksize),blocks_(blocks)
{//初始化头部fifo = (SHMFIFO_T*)malloc(sizeof(SHMFIFO_T));memset(fifo, 0, sizeof(SHMFIFO_T));cout << sizeof(SHMFIFO_T) << endl;//创建共享内存 创建信号量fifo->shmid = shmget(key_, 0, 0); //打开这个key的共享内存int size = sizeof(SHMHEAD_T) + blksize_ * blocks_;if (fifo->shmid == -1) //打开失败{//表示这个共享内存之前没有被创建fifo->shmid = shmget(key_, size, IPC_CREAT | 0666);//共享内存挂载fifo->shm_head = (SHMHEAD_T*)shmat(fifo->shmid, NULL, 0);//实际存放数据的地址fifo->payload = (char*)(fifo->shm_head + 1); //偏移一个结构体//初始化头部结构体fifo->shm_head->rd_index = 0;fifo->shm_head->wr_index = 0;fifo->shm_head->blkssize = blksize_;fifo->shm_head->blocks = blocks_;//初始化生产者信号量 表示有 blocks_ 个单元可用fifo->sem_full = semget(key_, 1, IPC_CREAT | 0666);sem_setval(fifo->sem_full, blocks_);//初始化消费者信号量fifo->sem_empty = semget(key_+1, 1, IPC_CREAT | 0666);sem_setval(fifo->sem_empty, 0);}
}
二、上课没有听懂或者没有理解的地方
无
三、当天学习的收获
210305设计共享内存相关推荐
- 【共享内存】基于共享内存的无锁消息队列设计
上交所技术服务 2018-09-05 https://mp.weixin.qq.com/s/RqHsX3NIZ4_BS8O30KWYhQ 目录 一.背景 二.消息队列的应用需求 (一) 通信架构的升 ...
- 共享内存 设计原理-shm
POSIX的shm_open()在/dev/shm/下打开一个文件,用mmap()映射到进程自己的内存地址 System V的shmget()得到一个共享内存对象的id,用shmat()映射到进程自己 ...
- 天龙八部服务器端共享内存的设计(3/3)
2. GameServer的消息响应如下: UINT WGRetUserDataHandler::Execute( WGRetUserData* pPacket, Player* pPlayer ) ...
- 天龙八部服务器端共享内存的设计
一.服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同.区角色数据库可以安装到Machine4,那么一个区有5台物理机器.LoginServer和WorldServe ...
- 天龙八部服务器端---共享内存的设计
2019独角兽企业重金招聘Python工程师标准>>> 原文地址:http://zhktiger.blog.sohu.com/163971755.html,非常感谢作者的分享. 一. ...
- [转]天龙八部服务器端-共享内存的设计
一.服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同.区角色数据库可以安装到Machine4,那么一个区有5台物理机器.LoginServer和WorldServe ...
- 天龙八部服务器端共享内存的设计(1/3)
一.服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同.区角色数据库可以安装到Machine4,那么一个区有5台物理机器.LoginServer和WorldServe ...
- 进程间通信IPC之--共享内存
每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲 ...
- showdialog 尝试读取或写入受保护的内存_TreadMarks: 基于工作站网络的共享内存计算...
TreadMarks: 基于工作站网络的共享内存计算 以前学MIT6.824时看过TreadMarks相关论文,这篇论文当时只翻译了一半.最近无意中看到这篇未完成的翻译,google了下发现仍然没有人 ...
最新文章
- Android驱动学习-内部机制_回顾binder框架关键点
- mysql2阶段提交具体实现_ShardingSphere 4.x 分布式事务之实现原理
- 笔试题 遗忘点记录 面向对象特点 + 产生死锁条件+ windows内存管理方法
- git 怎么提交忽略文件夹_git 设置忽略文件提交的几种方式
- LeetCode 447. 回旋镖的数量(哈希map+组合数)
- 动图(gif文件)的最简单制作---------录制
- 精通Android自定义View(十三)事件分发简述
- 流程图 3条泳道 决策_制定透明决策的三步流程
- iOS 图形编程总结
- 自动挡跑高速用S挡还是D挡? 回答
- Python中通过cx_Oracle访问数据库遇到的问题总结
- 中国剩余定理 —— 入门
- 高颜值的第三方网易云播放器YesPlayMusic
- 【校内模拟】八云蓝(线段树)(大力分类讨论)
- yilia 的html模板,自己动手修改完善yilia主题(下)
- 《环太平洋》视觉特效分解
- 斐讯路由器虚拟服务器怎么设置,斐讯PSG1218路由器如何设置
- 内容营销的思维方式 阿胜说
- linux php环境搭建教程,linux php环境搭建教程
- C++第3次实验:【项目三】定期存款利息计算器
热门文章
- Linux之字符串截取
- 计算机的世界:[-bit之魂-]
- MAC jupyter notebook
- scrapy同时运行多个spider
- 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...
- Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛
- android开发 eclipse alt+”/”自动提示失效
- 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载
- JavaScript面试时候的坑洼沟洄——表达式与运算符
- SQL SERVER读书笔记:nolock