共享内存 C++

共享内存是一种进程间通信的方式,它允许多个进程访问同一个物理内存区域,从而可以实现数据的共享。在共享内存机制中,创建并维护一个共享内存区域的进程被称为共享内存的拥有者。其他进程可以通过映射该共享内存区域到自己的地址空间中来访问共享内存中的数据,从而实现进程间的通信和数据共享。

 

共享内存具有以下优点:

  1. 高效性:共享内存的访问速度非常快,因为它不需要进行数据复制和传输,而是直接在内存中进行访问。

  2. 灵活性:共享内存可用于实现不同类型的进程间通信,包括线程间通信和不同计算机之间的通信。

  3. 易于使用:共享内存是一个非常通用的通信机制,因为它可以使用标准的共享内存API在不同的操作系统和编程语言中实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    
    #define SHM_SIZE 1024
    
    int main(int argc, char **argv) {
        int shmid;
        key_t key;
        char *shm, *s;
    
        /* 生成唯一的键值 */
        key = ftok(".", 'm');
    
        /* 创建共享内存区 */
        shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666);
        if (shmid < 0) {
            perror("shmget");
            exit(1);
        }
    
        /* 将共享内存区映射到当前进程空间 */
        shm = (char *) shmat(shmid, NULL, 0);
    
        /* 在共享内存区中写入数据 */
        s = shm;
        for (int i = 0; i < SHM_SIZE; i++) {
            *s++ = 'a';
        }
    
        /* 等待另一个进程读取数据 */
        sleep(5);
    
        /* 从共享内存区中读取数据 */
        s = shm;
        for (int i = 0; i < SHM_SIZE; i++) {
            putchar(*s++);
        }
    
        /* 删除共享内存区 */
        shmctl(shmid, IPC_RMID, NULL);
    
        return 0;
    }
     
    

    (14条消息) 进程间通信——共享内存(Shared Memory)_victory_523的博客-CSDN博客

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android平台上的共享内存是一种用于多个进程间共享数据的机制。它允许多个进程同时访问和修改共享内存区域,从而实现了进程间的通信和数据共享。 要在Android上使用共享内存,我们可以使用C语言来编写相关的代码。下面是一个使用C语言编写的Android共享内存的简单样例: ```c #include <sys/mman.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> int main() { int size = 4096; // 共享内存区域的大小 char *name = "shared_memory"; // 共享内存区域的名称 int fd = shm_open(name, O_CREAT | O_RDWR, 0666); // 创建共享内存 ftruncate(fd, size); // 设置共享内存的大小 char *ptr = (char *) mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); // 映射共享内存 sprintf(ptr, "Hello, shared memory!"); // 向共享内存写入数据 printf("Message in shared memory: %s\n", ptr); // 从共享内存读取数据 munmap(ptr, size); // 解除映射 close(fd); // 关闭文件描述符 shm_unlink(name); // 删除共享内存 return 0; } ``` 以上代码创建了一个大小为4096字节的共享内存区域,然后将数据"Hello, shared memory!"写入该共享内存,并读取并打印该数据。最后,解除映射、关闭文件描述符并删除共享内存。 需要注意的是,上述代码只是一个简单示例,实际使用中还需要进行错误处理和适当的同步控制,以确保多个进程能够正确读写共享内存。此外,Android也提供了其他进程间通信的机制,如Binder机制和ContentProvider等,开发者可以根据具体需求选择合适的通信方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值