Tag: 共享内存

使用java.nio在内存中写入文件?

使用nio,可以将现有文件映射到内存中。 但是有可能只在内存中创建它而没有硬盘上的文件吗? 我想模仿CreateFileMapping窗口函数,它允许你在内存中写入。 Java中是否有等效的系统? 目标是在内存中写入以便另一个程序(c)读取它。

从Runnable类中访问共享变量

我需要在Main类的main()方法中定义一个共享变量。 我需要两个线程才能访问该共享变量。 我通过实现Runnable接口并实现接口的抽象run()方法来创建线程。 我如何从我的类中定义的实现Runnable接口的run()方法中引用Main类的main()方法中定义的共享变量? 显然只是通过名称调用它们是行不通的 – 因为它们出现在我的Runnable类的范围之外。 编辑 – 道歉,这是一个简单的例子 public Class DoThread implements Runnable { public void run(){ sharedVar += 1 } } 并在一个单独的.class文件中: public Class Main { public static void main(String[] args) { int sharedVar = 0; Thread t1 = new Thread(new DoThread()); Thread t2 = new Thread(new DoThread()); t1.start(); t2.start(); t1.join(); t2.join(); […]

multithreading循环的效率

问候贵族社区, 我想要以下循环: for(i = 0; i < MAX; i++) A[i] = B[i] + C[i]; 这将在使用线程的共享内存四核计算机上并行运行。 下面的两个替代方案正在考虑由这些线程执行的代码,其中tid是线程的id:0,1,2或3。 (为简单起见,假设MAX是4的倍数) 选项1: for(i = tid; i < MAX; i += 4) A[i] = B[i] + C[i]; 选项2: for(i = tid*(MAX/4); i < (tid+1)*(MAX/4); i++) A[i] = B[i] + C[i]; 我的问题是,是否有一个比另一个更有效,为什么?

C ++和Java进程之间的共享内存

我的目标是将数据从C ++进程传递到Java进程,然后再返回结果。 我通过命名管道实现了这一点,但我更愿意共享数据而不是传递或复制数据,假设访问速度更快。 最初,我想过在C ++中创建一个可以用Java编写和读取的共享段,但我不确定这是否可以通过JNI实现,更不用说安全了。 我相信在Java中可以使用ByteBuffer.allocateDirect分配内存,然后使用GetDirectBufferAddress来访问C ++中的地址,但如果我是正确的,这是针对JNI中的本机调用,我无法在C ++进程中获取此地址? 丢失。 提前谢谢了。