我想分享多个计算机周围的某些内存区域,即C / C ++项目。 当计算机B上的某些内容访问当前在计算机A上的某个内存区域时,必须将其locking在A上并发送给B.当它唯一的linux可以编译时,我很好。
先谢谢了
你不能为一个简单的C / C ++项目做这个。
常见的计算机硬件没有直接支持的物理属性:一个系统上的内存不能被另一个系统读取。
为了让不同的机器上的C / C ++程序看起来是共享内存的,你必须编写提供这个功能的软件。 通常情况下,你需要做这样的事情:
此外,您需要确定如何处理内存一致性:如果两个进程几乎同时写入内存中的相同地址,会发生什么情况? 如果进程A写入到位置X,然后读取位置Y,则几乎在同一时间进程B写入到位置Y并读取X,他们看到了什么? 如果这两个进程看到的数据不可能是一次性写入内存的结果,那么可以吗?
最重要的是,这在时间上是非常昂贵的:存储到内存需要异常处理和网络操作需要数千次,可能几十万次,正常存储到内存。 无论何时写入共享内存,您的进程都将极其慢地执行。
正如评论中指出的,有软件解决方案。 它们使用节点中的处理器中的分页硬件来检测访问,并使用本地网络结构来传播对内存的更改。 一个硬件选择是反射记忆 – 你可以在这里阅读更多关于它的内容:
https://en.wikipedia.org/wiki/Reflective_memory http://www.ecrin.com/embedded/downloads/reflectiveMemory.pdf http://www.dolphinics.com/solutions/embedded-system-reflective-memory。 HTML
反射内存以环形或树形结构提供低延迟(每跳大约1微秒)。