目录

  • 一、学习的知识点
    • 共享内存的设计
      • 共享内存 的头部信息
      • 共享内存的属性
      • 共享内存类
      • 共享内存类的构造函数
  • 二、上课没有听懂或者没有理解的地方
  • 三、当天学习的收获

一、学习的知识点

共享内存的作用:

  1. 进程间传递数据
  2. 数据量多时 起缓冲作用 应设计为先进先出

共享内存的设计

头部信息放到共享内存中 是为了方便 另一个进程 对 共享内存中数据的读写

共享内存 的头部信息

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设计共享内存相关推荐

  1. 【共享内存】基于共享内存的无锁消息队列设计

    上交所技术服务 2018-09-05 https://mp.weixin.qq.com/s/RqHsX3NIZ4_BS8O30KWYhQ 目录 一.背景 二.消息队列的应用需求 (一)  通信架构的升 ...

  2. 共享内存 设计原理-shm

    POSIX的shm_open()在/dev/shm/下打开一个文件,用mmap()映射到进程自己的内存地址 System V的shmget()得到一个共享内存对象的id,用shmat()映射到进程自己 ...

  3. 天龙八部服务器端共享内存的设计(3/3)

    2. GameServer的消息响应如下: UINT WGRetUserDataHandler::Execute( WGRetUserData* pPacket, Player* pPlayer ) ...

  4. 天龙八部服务器端共享内存的设计

    一.服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同.区角色数据库可以安装到Machine4,那么一个区有5台物理机器.LoginServer和WorldServe ...

  5. 天龙八部服务器端---共享内存的设计

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址:http://zhktiger.blog.sohu.com/163971755.html,非常感谢作者的分享. 一. ...

  6. [转]天龙八部服务器端-共享内存的设计

    一.服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同.区角色数据库可以安装到Machine4,那么一个区有5台物理机器.LoginServer和WorldServe ...

  7. 天龙八部服务器端共享内存的设计(1/3)

    一.服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同.区角色数据库可以安装到Machine4,那么一个区有5台物理机器.LoginServer和WorldServe ...

  8. 进程间通信IPC之--共享内存

    每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲 ...

  9. showdialog 尝试读取或写入受保护的内存_TreadMarks: 基于工作站网络的共享内存计算...

    TreadMarks: 基于工作站网络的共享内存计算 以前学MIT6.824时看过TreadMarks相关论文,这篇论文当时只翻译了一半.最近无意中看到这篇未完成的翻译,google了下发现仍然没有人 ...

最新文章

  1. Android驱动学习-内部机制_回顾binder框架关键点
  2. mysql2阶段提交具体实现_ShardingSphere 4.x 分布式事务之实现原理
  3. 笔试题 遗忘点记录 面向对象特点 + 产生死锁条件+ windows内存管理方法
  4. git 怎么提交忽略文件夹_git 设置忽略文件提交的几种方式
  5. LeetCode 447. 回旋镖的数量(哈希map+组合数)
  6. 动图(gif文件)的最简单制作---------录制
  7. 精通Android自定义View(十三)事件分发简述
  8. 流程图 3条泳道 决策_制定透明决策的三步流程
  9. iOS 图形编程总结
  10. 自动挡跑高速用S挡还是D挡? 回答
  11. Python中通过cx_Oracle访问数据库遇到的问题总结
  12. 中国剩余定理 —— 入门
  13. 高颜值的第三方网易云播放器YesPlayMusic
  14. 【校内模拟】八云蓝(线段树)(大力分类讨论)
  15. yilia 的html模板,自己动手修改完善yilia主题(下)
  16. 《环太平洋》视觉特效分解
  17. 斐讯路由器虚拟服务器怎么设置,斐讯PSG1218路由器如何设置
  18. 内容营销的思维方式 阿胜说
  19. linux php环境搭建教程,linux php环境搭建教程
  20. C++第3次实验:【项目三】定期存款利息计算器

热门文章

  1. Linux之字符串截取
  2. 计算机的世界:[-bit之魂-]
  3. MAC jupyter notebook
  4. scrapy同时运行多个spider
  5. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...
  6. Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛
  7. android开发 eclipse alt+”/”自动提示失效
  8. 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载
  9. JavaScript面试时候的坑洼沟洄——表达式与运算符
  10. SQL SERVER读书笔记:nolock