共享内存在java中的实现
2010-12-17 15:17
477 查看
下面的代码实现了如上功能,它的作用类似UNIX系统中的mmap函数。
// 获得一个只读的随机存取文件对象
RandomAccessFile RAFile = new RandomAccessFile(filename,"r");
// 获得相应的文件通道
FileChannel fc = RAFile.getChannel();
// 取得文件的实际大小,以便映像到共享内存
int size = (int)fc.size();
// 获得共享内存缓冲区,该共享内存只读
MappedByteBuffer mapBuf = fc.map(FileChannel.MAP_RO,0,size);
// 获得一个可读写的随机存取文件对象
RAFile = new RandomAccessFile(filename,"rw");
// 获得相应的文件通道
fc = RAFile.getChannel();
// 取得文件的实际大小,以便映像到共享内存
size = (int)fc.size();
// 获得共享内存缓冲区,该共享内存可读写
mapBuf = fc.map(FileChannel.MAP_RW,0,size);
// 获取头部消息:存取权限
mode = mapBuf.getInt();
如果多个应用映像同一文件名的共享内存,则意味着这多个应用共享了同一内存数据。这些应用对于文件可以具有同等存取权限,一个应用对数据的刷新会更新到多个应用中。
为了防止多个应用同时对共享内存进行写操作,可以在该共享内存的头部信息加入写操作标志。该共享内存的头部基本信息至少有:
int Length; // 共享内存的长度。
int mode; // 该共享内存目前的存取模式。
// 获得一个只读的随机存取文件对象
RandomAccessFile RAFile = new RandomAccessFile(filename,"r");
// 获得相应的文件通道
FileChannel fc = RAFile.getChannel();
// 取得文件的实际大小,以便映像到共享内存
int size = (int)fc.size();
// 获得共享内存缓冲区,该共享内存只读
MappedByteBuffer mapBuf = fc.map(FileChannel.MAP_RO,0,size);
// 获得一个可读写的随机存取文件对象
RAFile = new RandomAccessFile(filename,"rw");
// 获得相应的文件通道
fc = RAFile.getChannel();
// 取得文件的实际大小,以便映像到共享内存
size = (int)fc.size();
// 获得共享内存缓冲区,该共享内存可读写
mapBuf = fc.map(FileChannel.MAP_RW,0,size);
// 获取头部消息:存取权限
mode = mapBuf.getInt();
如果多个应用映像同一文件名的共享内存,则意味着这多个应用共享了同一内存数据。这些应用对于文件可以具有同等存取权限,一个应用对数据的刷新会更新到多个应用中。
为了防止多个应用同时对共享内存进行写操作,可以在该共享内存的头部信息加入写操作标志。该共享内存的头部基本信息至少有:
int Length; // 共享内存的长度。
int mode; // 该共享内存目前的存取模式。
相关文章推荐
- java中共享内存的实现
- 使用技巧:共享内存在Java中实现和应用
- 共享内存在java中的实现
- 共享内存在Java中的实现和应用
- 共享内存在java中的实现
- IPC通信之共享内存(文件锁)Java实现
- 共享内存在Java中实现和应用
- 共享内存在Java中实现和应用
- 共享内存在Java中实现和应用
- 共享内存在java中的实现
- Linux下利用信号量函数和共享内存函数和C语言实现生产者消费者问题
- java基于AbstractQueuedSynchronizer实现资源共享锁,限制并发线程数目
- h.264并行解码算法2D-Wave实现(基于多核共享内存系统)
- 内核和用户空间共享内存的实现例程-proc和mmap
- Android内存共享、进程间高性能IO、手动实现 Binder IPC、Aidl例子
- 共享内存实现进程间大数据的交换
- VC进程间共享内存的实现步骤
- 用共享内存和信号量实现的简单的卖票系统
- java多线程------实现Runnable接口创建多进程,实现资源共享
- Java学习笔记之实现Runnable接口可以资源共享(卖票系统)