如何在c#和java进程之间使用互斥?

时间:2017-06-25 09:00:41

标签: java c# multithreading ipc

我想使用从java到c#的内存映射文件来执行使用者生产者模式。 我需要一种从Java到c#的信令低延迟方式来读取数据。

在c#中,你可以在进程之间使用一个名为Mutex(new Mutex(true,“sharedMutex1”))并使用Mutex.WaitOne()和  Mutex.ReleaseMutex()来控制进程。

如何从Java进程执行此操作?

编辑:我知道您可以使用文件锁来执行此操作,但我希望远离文件系统以保持较低的延迟。

编辑:另一种选择是通过JNI使用c ++。所以我想我现在问的是,它是否可以直接在Java中完成?

1 个答案:

答案 0 :(得分:2)

有多种选择:

  • 使用基于文件的锁定,正如您所提到的
  • 使用内存映射文件和基于低级内存访问的协议。这很难做到,你需要访问sun.misc.Unsafe'操作。我会查看像OpenHFT这样的库,它为您提供了不安全操作的合理API。但是,它仍然很难。
  • 使用JNI将Win32 / unix API用于进程间锁。我建议使用类似JNAJNR的内容,它允许您在不编写JNI C部分的情况下调用C apis。

这里有一个调用WIN32锁API的JNA示例:

MSet