进程间通信之共享内存技术

博客介绍了在Unix系统下,共享内存作为进程间通信的一种方法。详细阐述了共享内存的定义及其通过映射机制的实现方式。通过展示C++代码示例,解释了如何在两个进程中创建和使用共享内存进行数据交换。
摘要由CSDN通过智能技术生成

共享内存的使用

共享内存定义—-摘自百度百科

共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。


共享内存的实现机制
  • 共享内存主要是通过映射机制实现的。

        Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。当调用 CreateFileMapping 创建命名的内存映射文件对象时,Windows 即在物理内存申请一块指定大小的内存区域,返回文件映射对象的句柄 hMap。为了能够访问这块内存区域必须调用 MapViewOfFile 函数,促使 Windows 将此内存空间映射到进程的地址空间中。当在其他进程访问这块内存区域时,则必须使用OpenFileMapping 函数取得对象句柄 hMap,并调用 MapViewOfFile 函数得到此内存空间的一个映射。这样一来,系统就把同一块内存区域映射到了不同进程的地址空间中,从而达到共享内存的目的。
    

代码块

头文件SkyRamDrive.h

// SkyRamDrive.h: interface for the SkyRamDrive class.

#if !defined(SKY_RAM_DRIVE_H)
#define SKY_RAM_DRIVE_H
#include <stdio.h>

#define     MAX_DATA_SIZE           50000   // Buffer size Settings for real-time data areas 
#define     MAX_STRUCT_NUM          25      // Buffer size Settings for ascending structure variables 
#define     MAX_STRUCT_NUM_DOWN     20      // The buffer size of the descending structure variable is set 
#define     SHM_SIZE   250000               // The size of the Shared memory area 

struct StructDrive
{
    int   iVersion;                 
    char  chExistGetCmd;            
    char  chGetCmd[ 200 ];          
    int   iValue[MAX_DATA_SIZE] ;   
    double dValue[MAX_DATA_SIZE];
    int   iStructNum ;          
    char  chStruct[ MAX_STRUCT_NUM ][ 200 ];  
    int   iStructNumDown ;      
    char  chStructDown[ MAX_STRUCT_NUM_DOWN ][ 200 ]; 
};

class SkyRamDrive
{
public:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值