进程间的通讯---------共享内存

《一》共享内存的实现原理:

共享内存区域是多个进程共享的一部分物理内存,如果多个进程都把该内存区域映射到自己的虚拟内存地址空间,则这些进程就都可以直接访问这篇共享内存区域,从而可以通过该区域进行进程间的通讯 ,一个进程向共享内存中写入了数据,共享这个内存区域的所有进程都可以立刻获取到其中的数据,这块共享虚拟内存的页面出现在每一个共享该页面的进程的页表中,但是它不需要再所有进程的虚拟内存中都有相同的虚拟地址.

《二》特点:它是进程通讯的最快的方法,因为它少了两次拷贝,直接操作同一片内存即可

《三》共享内存的操作:
创建/获取:int shmget((key_t)key, size_t size, int flag);
映射到本进程的地址空间上:

void* shmat(int shmid, void *addr, int flag);
断开链接:int shmdt(void *ptr);
释放:int shmctl(int shemid, int cmd, struct shmid_ds *buff);

共享内存

共享内存对于操作的进程而言, 是一个临界资源, 所以进程在使用共享内存时必须进行进程同步控制。 ----》 信号量

《四》共享内存代码:(sem.c  sem.h在信号量中有)通过A进程把字符串输入到共享内存中,B进程计算字符串长度

对共享内存中进行写操作

共享内存

对共享内存中进行读操作

共享内存

猜你喜欢

转载自blog.csdn.net/weixin_41537785/article/details/81214963