简介本文为第十六篇,进程同步的共享内存。上面介绍的方法都是解决线程同步的方法。本文是一种处理进程同步的方法---共享内存sharedmemorythreadsynchronization。每个进程可能有一个或多个线程。线程共享进程资源。线程之间也需要通信,或者需要在线程之间同步一些进程资源的状态。这时候就需要线程间的信息同步。进程同步操作系统中可能存在一个或多个进程,进程之间共享计算机资源(包括内存、磁盘等都是共享的),因此进程之间也需要进行信息同步。上一篇中提到的生产者消费者问题和哲学家就餐问题都是进程同步的原因。在学习本文的共享内存之前,先回顾一下前面提到的操作系统是如何进行进程管理的。每个进程都有自己的进程空间,它们的进程空间通过段页存储管理通过页表映射到实际内存中。它们进程间的进程空间互不干扰,相互独立。因此:某种程度上,由于操作系统的进程管理,多个进程共享物理内存(即多个进程共享物理内存),进程之间的内存空间是独立的(即任意两个进程的逻辑内存空间)是完全不相关的),从而保证每个进程独立运行的安全(这也是进程管理的作用)进程默认不能访问进程空间外的内存空间(即一个进程不能访问另一个进程的内存空间过程)。然而,共享内存可以打破这个限制。通过共享内存,进程可以传递页表。映射到同一块内存,这块内存可以同时被进程1和进程2使用。即这块共享内存可以被进程1读写,也可以被进程2读写.因此,通过共享内存,将进程1和进程2联系起来。那么共享内存也是操作系统提供的一种重要的进程同步方式。Go,让不同的进程可以通过页表访问同一块物理内存)共享内存是两个进程之间共享和传递数据最快的方式共享内存不提供同步机制,需要借助其他机制管理访问避免并发访问带来的问题注意:同步机制:在并发编程中,必须限制每个进程对公共变量的访问。这种限制称为同步。使用共享内存步骤申请共享内存并将共享内存连接到进程空间(这样进程就可以通过页表访问共享内存)使用共享内存离开进程空间&删除代码示例在示例中,会有一个客户端和一个服务器,它们通过共享内存进行通信。common.h放一些公共信息#ifndef__COMMON_H__#define__COMMON_H__//字符串在共享内存中的最大长度#defineTEXT_LEN2048//共享内存数据结构//因为默认情况下,内存中没有数据结构,当程序需要使用共享内存,需要定义数据结构,将结构数据存放在共享内存中structShmEntry{//是否可以读取共享内存进行进程间同步boolcan_read//共享内存信息char味精[2048]};#endifserver。cpp#include"common.h"#include
