【发布时间】:2013-12-22 06:11:50
【问题描述】:
我可以让 2 个 Java 进程通过 MappedByteBuffer 共享一个内存区域。
但是如果这两个进程可以同时读取或写入偏移量x 处的字节(从共享内存的开始),我如何同步访问这个字节?
这是期望的用法:
假设:每个进程只有 1 个线程会尝试读写访问。
|
========================== | ============================
Process A | Process B
========================== | ============================
|
lock(sharedMemory[x]); | lock(sharedMemory[x]); (Line 1.)
... | ...
// read from byte at x | // write to byte at x
a = sharedMemory[x]; | sharedMemory[x] = b;
... | ...
unlock(sharedMemory[x]); | unlock(sharedMemory[x]); (Line 20.)
========================== | ============================
|
上图中时间向下流动。
因此,只有进程 A 或进程 B(但不能同时执行)可以在给定时间执行第 1 到 20 行。
【问题讨论】:
-
您似乎正在尝试有效地重新实现 IPC。多年来,操作系统已经为 IPC 提供了多种有用的机制,其中一些并没有遇到这个问题。你确定你需要在这里重新发明轮子吗?
-
我的问题中有一个非常重要的关键字:Java。
-
是的,Java 可以调用原生库。 Java 还支持众所周知的 IPC 机制 TCP/IP 套接字。
-
你可以使用 FileLock:写独占锁,读共享锁。
-
@SamiKorhonen 嗯,现在我为什么没有想到呢?! :-) 请考虑发布您的评论作为答案。我将相对于彼得的评估它,并选择更简单的替代方案(几天后)。谢谢!
标签: java shared-memory synchronize