c - 两台Linux机器之间共享内存?

标签 c process shared-memory

我正在尝试弄清楚如何在两台 Linux 机器之间使用共享内存。理想情况下,每台机器都有自己的共享内存段,并且运行两个进程(一个从机器的共享内存中读取,另一个向机器的共享内存中写入)。当一台机器的共享内存被写入或更新时,我需要通知另一台机器,并将其自己的共享内存与第一台机器的共享内存同步。

这可能吗?我怎样才能做到这一点?

感谢一百万!

最佳答案

I'm trying to figure out how I might be able to work with shared memory between two Linux machines.

这是一个坏主意。同步访问共享内存很困难;即使在一台机器上,您也很难防止多个客户端相互干扰。在多台机器上,情况只会变得更糟。

如果你真的想这样做,你基本上有两个选择:

  1. 简单的方法。创建一个文件来表示共享内存并将其存储在网络文件共享上。使用mmap()将其映射到每台机器上的内存中。确保使用 msync() 将更改刷新到磁盘并使缓存无效。

  2. 复杂的方式。使用 Infiniband 链路连接机器并执行远程内存访问。如何执行此操作的详细信息取决于您使用的 Infiniband 供应商。

综上所述,完全使用另一种方法可能会更好。详细信息将取决于您的应用程序。

关于c - 两台Linux机器之间共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51955523/

相关文章:

计算 FLOP 次数和数据大小,并检查函数是受内存限制还是受 CPU 限制

macos - Mac 操作系统中的通信问题

c++ - 为什么进程会在 RtlExitUserProcess/LdrpDrainWorkQueue 中挂起?

C:如何shmat一个结构?

c - 尽管再次使用 O_CREAT,但以相同名称重新打开时 shm_open() 失败

改变数组的基址

可以映射零页或写入地址零吗?

比较字符串之间有多个空格

Node.JS 父进程 ID

共享内存中的 C 结构成员指针 (mmap)