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

广州管网建设驻马店做网站优化

广州管网建设,驻马店做网站优化,网站建设 培训 南充,建设厅安全员证一、共享内存的核心价值 共享内存是进程间通信(IPC)中效率最高的方式,它通过直接读写物理内存实现数据共享,避免了内核与用户空间的多次数据拷贝。但因其无内置同步机制,需结合信号量或互斥锁保证数据一致性 二、核心…


一、共享内存的核心价值

共享内存是进程间通信(IPC)中效率最高的方式,它通过直接读写物理内存实现数据共享,避免了内核与用户空间的多次数据拷贝。但因其无内置同步机制,需结合信号量互斥锁保证数据一致性


二、核心函数解析与使用示例

以下以System V共享内存函数为例,结合调试函数 ShmDebug 说明完整开发流程。

1. ​创建共享内存:shmget()
  • 功能:生成或获取共享内存标识符。
  • 参数
    • key:唯一标识符,建议用 ftok() 生成
    • size:内存大小(需按页对齐,通常为4KB的整数倍)
    • flag:权限标志(如 IPC_CREAT | 0666
  • 示例
    key_t key = ftok("/tmp/app.conf", 'A');  
    int shmid = shmget(key, 4096, IPC_CREAT | 0666);  
    if (shmid == -1) {  perror("shmget error");  exit(1);  
    }  
  • 注意ftok()的路径需稳定(如配置文件),避免因文件重建导致key变化
2. ​映射内存:shmat()
  • 功能:将共享内存附加到进程地址空间。
  • 参数
    • shmidshmget返回的标识符。
    • shmaddr:映射地址(通常设为NULL由系统分配)
  • 示例
    char *shm_addr = (char *)shmat(shmid, NULL, 0);  
    if (shm_addr == (char *)-1) {  perror("shmat error");  exit(1);  
    }  
3. ​数据读写

直接操作映射后的指针即可:

// 写入数据  
strcpy(shm_addr, "Hello from Process A!");  // 读取数据  
printf("Received: %s\n", shm_addr);  
4. ​分离内存:shmdt()
  • 作用:解除进程与共享内存的映射关系(不删除内存段)
if (shmdt(shm_addr) == -1) {  perror("shmdt error");  
}  
5. ​控制与删除:shmctl()
  • 功能:删除共享内存或获取状态信息。
  • 示例(删除)​
    shmctl(shmid, IPC_RMID, NULL);  // 永久删除  

三、调试与状态监控(结合用户函数)

通过 shmctl + shmid_ds 结构体可获取共享内存的运行时状态,例如:

void ShmDebug(int shmid) {  struct shmid_ds shmds;  if (shmctl(shmid, IPC_STAT, &shmds) == -1) {  std::cerr << "shmctl error: " << strerror(errno) << std::endl;  return;  }  std::cout << "内存大小: " << shmds.shm_segsz << " 字节" << std::endl;  std::cout << "附加进程数: " << shmds.shm_nattch << std::endl;  std::cout << "创建时间: " << ctime(&shmds.shm_ctime);  
}  
  • 关键字段
    • shm_segsz:内存段大小
    • shm_nattch:当前附加的进程数,用于检测内存泄漏

四、实战案例:生产者-消费者模型

生产者代码(写入数据)​

// 创建共享内存  
key_t key = ftok(".", 'S');  
int shmid = shmget(key, 1024, IPC_CREAT | 0666);  
char *data = shmat(shmid, NULL, 0);  sprintf(data, "Data: %d", rand() % 100);  // 写入随机数据  
shmdt(data);  

消费者代码(读取数据)​

int shmid = shmget(key, 1024, 0);  // 不创建,仅获取  
char *data = shmat(shmid, NULL, SHM_RDONLY);  // 只读模式  
printf("读取数据: %s\n", data);  
shmdt(data);  
shmctl(shmid, IPC_RMID, NULL);  // 删除共享内存  

五、注意事项与常见问题
  1. 同步机制:必须使用信号量(如sem_init)或文件锁(如flock)避免竞态条件
  2. 权限问题:确保进程对共享内存有读写权限(如0666
  3. 内存泄漏:监控shm_nattch,确保所有进程调用shmdt
  4. 跨平台限制:System V共享内存在不同Unix系统间行为可能不一致,建议优先用POSIX标准

六、扩展工具
  • ​**ipcs -m**:查看系统共享内存状态
  • ​**ipcrm -m <shmid>**:手动删除共享内存

文章转载自:

http://CZ7VTWXe.kybyf.cn
http://dqBIdDSG.kybyf.cn
http://VfNDUg5l.kybyf.cn
http://T1k6uoy9.kybyf.cn
http://JUaH7CW6.kybyf.cn
http://YBbpJ51r.kybyf.cn
http://Jv7TkCfR.kybyf.cn
http://XpW1KQDN.kybyf.cn
http://sMOTPKPV.kybyf.cn
http://UBHVwz92.kybyf.cn
http://rjlFMkpN.kybyf.cn
http://UKYFuky2.kybyf.cn
http://9fyK5TDt.kybyf.cn
http://P4gbYF4H.kybyf.cn
http://RmBkuS9A.kybyf.cn
http://ibQZ2RV3.kybyf.cn
http://A4d16LZ6.kybyf.cn
http://UnSi3dJA.kybyf.cn
http://4gzvjhSX.kybyf.cn
http://Pq2y3LTh.kybyf.cn
http://7ZyzNqJx.kybyf.cn
http://kbxM4uBt.kybyf.cn
http://PXYhwrUj.kybyf.cn
http://Z3Nuj0MM.kybyf.cn
http://u1UkYf33.kybyf.cn
http://tCpDPaFZ.kybyf.cn
http://PlOxZ9j4.kybyf.cn
http://BILnXvmT.kybyf.cn
http://VMkpzQFt.kybyf.cn
http://R1p6NPFd.kybyf.cn
http://www.dtcms.com/wzjs/764218.html

相关文章:

  • 郑州做设计公司网站网易云音乐wordpress插件
  • 企业网站建设自己的官网网站建设 上传和下载功能
  • 网站的meta标签优化中企动力是干啥的
  • 玉林建设工程信息网站个人网页设计图片大全
  • 制作公司网站需要购买域名和服务器吗生成器在线制作
  • 网站建设 成都今网科技网站建设的三网合一
  • 在网站上做承诺二手房交易税费
  • 友情链接平台广告网站seo优化效果
  • 网站制作网站建设案例南京做网站南京乐识好
  • 免费教育网站建设用自己电脑做服务器建网站
  • 域名备案和网站备案区别长沙建设工程官方网站
  • 网站模板样式修改十大正规平台
  • 阿里云网站建设最后什么样子福永网站建设公司哪家好
  • 外面网站怎么做深圳市seo网络推广平台
  • 零基础学做网站页一个公司怎么做网站都放些什么
  • 公司做网站的费用怎么做账建筑招标网站
  • 用fullpage做的网站河南核酸检测vip
  • 家居网站建设营销推广网站推广公司运营模式
  • 网站栅格新乡平原新区建设局网站
  • 国外网站建设现状wordpress积分代码
  • 广西两学一做网站深圳提倡居家办公
  • 如何模板建站承接php网站建设
  • 专业网站建设网站设计软件如何开发制作
  • 网站建设中手机版中国建设工程造价网
  • 电信网站备案郑州定制网站建设
  • 门户网站开源win主机wordpress
  • 网页制作与网站建设答案教师网络培训
  • 微网站地图定位wordpress怎么多用户
  • 用什么软件做公司网站免费纯ftp空间
  • 建一个网站大概多少钱天水网站建设公司