当前位置: 首页 > news >正文

网站建设用阿里还是华为云crm客户管理系统怎么用

网站建设用阿里还是华为云,crm客户管理系统怎么用,门户一号wordpress主题,展示网站系统架构设计本期我将要带大家学习的是有关进程间通信的另一种方式——共享内存。共享内存是一种用于进程间通信的高效机制#xff0c;允许多个进程访问和操作同一块内存区域。 目录 #xff08;一#xff09;深刻理解共享内存 1.1 概念解释 1.2 共享内存原理 1.3 共享内存数据结构 … 本期我将要带大家学习的是有关进程间通信的另一种方式——共享内存。共享内存是一种用于进程间通信的高效机制允许多个进程访问和操作同一块内存区域。 目录 一深刻理解共享内存 1.1 概念解释 1.2 共享内存原理 1.3 共享内存数据结构 1.4 共享内存函数 二 代码实现 一深刻理解共享内存 1.1 概念解释 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间这些进程间数据传递不再涉及到内核它允许不同的进程通过映射同一块物理内存区域来实现数据的直接读写换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据 1.2 共享内存原理   首先大家要明白要进入通信前提是不是得有进程而且对于共享内存它不像匿名管道那样必须得是父子进程对于共享内存任意两个进程之间都可以创建其中它的通信原理我们在思考的时候一定要先想明白只要此时存在一个进程它就有己的PCB、它就要有自己的地址空间、它就有自己的页表同样的对于另一个进程在被创建的时候也要有自己的PCB、也要有自己的地址空间、那么更要有自己的页表结构好。 【解释说明】  不管是进程a还是B这两进程当中任一个进程它对应的都要将自己的数据要能够映射到物理内存当中的特定区域最终它的地址空间当中所有的代码和数据都会经过我们对应的页表映射到我们对应的物理内存当中进而让我们找到该进程匹配的代码和数据对于进程B来讲它也有自己的地址空间它也有自己的页表最终可以映射到我们对应的内存当中的某一些特定的区域来代表它的代码或者数据那么同样的进程a也有自己的代码和数据包括它自己的还有动态库等等最后也会映射到我们物理内存当中的特定的区域 【解释说明】 第一步我们先有一段儿我们对应的物理内存的空间第二步对于进程A可以把一个库加载内存映射到他这个地址空间里然后返回给用户或者让对应的代码区的代码直接跳转到库里面去跑而我们如果我创建了一块儿内存然后想办法把对应的这块儿内存经过页表映射到我们对应的地址空间当中的某一个区域然后我把这块儿地址空间对应的区域地址返回给用户。我们这里就相当于构建从共享内存到当前进程的地址空间内的映射然后在这里将对应空间它的起始地址返回给用户第三步同样的进程B它如果也做同样的工作也将对应的这部分地址空间映射到自己的那么共享区当中将对应的代码和数据的那个虚拟起始地址尤其是内存块儿的起始地址返回给用户那么未来进程A和进程B只要使用对应的起始的虚拟地址就可以访问了。此时我们不就完成了让不同的进程A和进程B看到了同一份儿资源这就叫做共享内存 1.3 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kernel_time_t shm_ctime; /* last change time */__kernel_ipc_pid_t shm_cpid; /* pid of creator */__kernel_ipc_pid_t shm_lpid; /* pid of last operator */unsigned short shm_nattch; /* no. of current attaches */unsigned short shm_unused; /* compatibility */void *shm_unused2; /* ditto - used by DIPC */void *shm_unused3; /* unused */ }; 1.4 共享内存函数 在Linux系统中共享内存通常通过系统调用来实现。以下是一些与共享内存相关的主要函数 ftok函数 功能生成一个唯一的key用于标识共享内存段。参数 keyfile与路径名相关的文件名可以是一个存在的文件。id一个非零整数。返回值生成的key。 man 手册查询结果 shmget函数 功能用来创建共享内存原型int shmget(key_t key, size_t size, int shmflg);参数 key:这个共享内存段名字size:共享内存大小shmflg:由九个权限标志构成它们的用法和创建文件时使用的mode模式标志是一样的 返回值成功返回一个非负整数即该共享内存段的标识码失败返回-1 man 手册查询结果 shmat函数功能将共享内存段连接到进程地址空间原型void *shmat(int shmid, const void *shmaddr, int shmflg);参数 shmid: 共享内存标识shmaddr:指定连接的地址shmflg:它的两个可能取值是SHM_RND和SHM_RDONLY 返回值成功返回一个指针指向共享内存第一个节失败返回-1 man 手册查询结果 说明 shmaddr为NULL核心自动选择一个地址shmaddr不为NULL且shmflg无SHM_RND标记则以shmaddr为连接地址。shmaddr不为NULL且shmflg设置了SHM_RND标记则连接的地址会自动向下调整为SHMLBA的整数倍。公式shmaddr -(shmaddr % SHMLBA)shmflgSHM_RDONLY表示连接操作用来只读共享内存 shmdt函数 功能将共享内存段与当前进程脱离原型int shmdt(const void *shmaddr);参数 shmaddr: 由shmat所返回的指针 返回值成功返回0失败返回-1 注意将共享内存段与当前进程脱离不等于删除共享内存段 man 手册查询结果  shmctl函数功能用于控制共享内存原型int shmctl(int shmid, int cmd, struct shmid_ds *buf);参数 shmid:由shmget返回的共享内存标识码cmd:将要采取的动作有三个可取值buf:指向一个保存着共享内存的模式状态和访问权限的数据结构 返回值成功返回0失败返回-1 man 手册查询结果  二 代码实现 接下来我们就用上述描述的接口简单的实现一下共享内存。  【client.cc】 #includecommon.hpp #includeunistd.h int main() {key_t k getkey();cout client key: toHex(k) endl;int shmid getShm(k, gsize);cout client shmid: shmid endl;//3. 将自己和共享内存关联起来char* start attachShm(shmid);sleep(15);// 4. 将自己和共享内存去关联detachShm(start);return 0; } 【server.cc】 #includecommon.hpp #includeunistd.h int main() {//1. 创建keykey_t k getkey();cout server key: toHex(k) endl;//2. 创建共享内存int shmid createShm(k, gsize);cout server shmid: shmid endl;sleep(3);//3. 将自己和共享内存关联起来char* start attachShm(shmid);sleep(15);// 4. 将自己和共享内存去关联detachShm(start);//删除共享内存delShm(shmid);return 0; } 【common.hpp】 #ifndef __COMMON_HPP__ #define __COMMON_HPP__#include iostream #include cerrno #include cstdio #include cstring #include cassert #include string #include sys/ipc.h #include sys/shm.h #include sys/types.h #include sys/stat.h using namespace std;#define PATHNAME . #define PROJID 0x6666 const int gsize 4096; //暂时key_t getkey(){key_t k ftok(PATHNAME,PROJID);if(k -1){cerr error: errno : strerror(errno) endl;exit(1);}return k; }string toHex(int x){char buffer[64];snprintf(buffer, sizeof buffer, 0x%x, x);return buffer; }static int createShmHelper(key_t k, int size, int flag){int shmid shmget(k, gsize, flag);if(shmid -1){cerr error: errno : strerror(errno) endl;exit(2);}return shmid; }int createShm(key_t k, int size){umask(0);return createShmHelper(k, size, IPC_CREAT | IPC_EXCL | 0666); }int getShm(key_t k, int size) {return createShmHelper(k, size, IPC_CREAT); }void delShm(int shmid){int n shmctl(shmid,IPC_RMID,nullptr);assert(n ! -1);(void)n; }char* attachShm(int shmid) {char *start (char*)shmat(shmid, nullptr, 0);return start; }void detachShm(char *start) {int n shmdt(start);assert(n ! -1);(void)n; }#endif 总的来说共享内存是一种强大的进程间通信机制适用于需要高效、频繁共享大量数据的场景。在使用时需要注意同步和互斥机制以确保数据的一致性和安全性。
http://www.pierceye.com/news/644001/

相关文章:

  • 自建网站 备案视频号广告推广
  • 青岛网站优化东莞市场监督管理局官网
  • 深圳珠宝网站设计临沂seo优化
  • 东莞网站建项目代理
  • 心理咨询网站开发营销型网站的建设要求都有什么
  • 优化网站要怎么做中国外协机械加工订单网
  • 运动健身型网站开发永久网站空间
  • 好的网站建设公司排名小程序怎么引流推广
  • 建设部网站 光纤到户平顶山 网站建设公司
  • 网站建设费计入哪个科目赛罕区城乡建设局网站
  • 计算机协会网站模板如何做微信下单小程序
  • 购物网站开发流程图大连装修公司
  • 网站开发定制推广杭州手表网站域名
  • 惠州网站建设方案推广企业网站必备模块
  • 网站内页产品做跳转做电商有哪些平台
  • 如何自建网站服务器wordpress下载权限
  • 重庆专业网站设计服务做染料的网站
  • 长春模板建站公司浙江住房和建设厅网站
  • 网站建设公司 佛山南京移动网站建设
  • 网站建设目录规范微信h5网站开发
  • 做ppt卖给网站枣庄做网站优化
  • 新乡营销型网站建设做软件的中介网站
  • 延边州建设局网站软件公司主要做哪些
  • 建设网站带后台管理程序制作软件
  • 榆林市住房和城市建设局网站梁志天设计公司项目
  • 建设网站怎么搞做非法网站判刑多少年
  • 做查询网站 发布数据wordpress nextapp
  • 福鼎建设局网站首页上海社区网站建设
  • 企业网站免费推广方案wordpress文章类模板
  • 从化区住房和建设局网站网站开发所需要的的环境