Advertisement

Linux进程通信---共享内存的代码实现

阅读量:

1、什么是共享内存

从直观上来看,在逻辑层面上建立一块共同的空间供多个过程访问并修改;这种机制能够在两个正在运行的过程中高效地传递数据信息。这种基于共享存储的设计能够最大化资源利用率的同时减少不必要的通信开销;所有参与过程都能访问同一片物理存储区域内的数据单元就像这些单元被动态分配的一样;每当某一个过程对这段存储进行操作时其改动会立即传播到所有能够访问该区域的所有其他过程。

但有一点需要注意:共享内存本身不提供同步功能。具体来说,在第一个进程完成对其共享内存的写操作时,并没有防止第二个进程在此时进行读取的自动机制。因此,在这种情况下我们通常需要使用其他手段来实现访问同步,比如信号量等方法。

2、系统函数详解

(1)获得key值的函数:

复制代码
     key_t ftok(const char *pathname, int proj_id);

(2)申请共享内存函数:

复制代码
    int shmget(key_t key, size_t size, int shmflg); 申请共享内存
        错误码:
            EINVAL:参数size小于SHMMIN或大于SHMMAX
            EEXIST:预建立key所指的共享内存,但已经存在
            EIDRM:参数key所指的共享内存已

全部评论 (0)

还没有任何评论哟~