Luk*_*uke 3 c# java multithreading ipc
我想使用从 java 到 c# 的内存映射文件来实现消费者-生产者模式。我需要一种从 java 到 c# 的低延迟信号发送方式来读取数据。
在 C# 中,您可以在进程之间使用命名互斥体 (new Mutex(true,"sharedMutex1")),并使用 Mutex.WaitOne() 和 Mutex.ReleaseMutex() 来控制进程之间。
我如何从 Java 进程中执行此操作?
编辑:我知道您可以使用文件锁来执行此操作,但我想远离文件系统以保持低延迟。
编辑:另一种选择是通过 JNI 使用 C++。所以我想我现在想问是否可以直接用Java完成?
有多种选择:
下面是一个使用 JNA 调用 WIN32 锁 API 的示例:
/**
* Definitions of the Win32 API. JNA has some for windows, so check first
* In case CreateMutex is not included.
*/
public interface Kernel32Ex extends Kernel32 {
WinNT.HANDLE CreateMutex(
WinBase.SECURITY_ATTRIBUTES lpMutexAttributes,
boolean bInitialOwner,
String lpName
);
boolean ReleaseMutex(
WinNT.HANDLE hMutex
);
}
public static void main(String[] args) throws Exception {
// The binding. Create it once
final Kernel32Ex Win32 = Native.loadLibrary("kernel32", Kernel32Ex.class, W32APIOptions.UNICODE_OPTIONS);
WinNT.HANDLE handle = Win32.CreateMutex(null,
true,
"My-Mutext");
if (handle == null) {
throw new Win32Exception(Win32.GetLastError());
} else {
System.out.println("Holding the win32 mutex");
Win32.ReleaseMutex(handle);
}
}
Run Code Online (Sandbox Code Playgroud)