Synchronization JNI共享库不是线程安全的

Synchronization JNI共享库不是线程安全的,synchronization,java-native-interface,native-code,Synchronization,Java Native Interface,Native Code,我有一个本机库,我想在Java应用程序中使用它。多个线程将使用该库,多个Java进程也将使用同一个库。该库是用C编写的,我目前正在Windows上使用MinGW进行编译。我应该使用什么同步机制来同步非线程安全的本机库 提前谢谢 最简单的方法是使所有Java本机方法静态同步,这将稍微取决于库的结构。是完全不安全(即没有两个并发线程可以调用方法)还是并发访问同一数据不安全?如果是这样,公共数据可以封装在Java对象中,还是在库中保持静态?它是一个非常简单的库,只提供一些函数,但必须保持状态。对于调用

我有一个本机库,我想在Java应用程序中使用它。多个线程将使用该库,多个Java进程也将使用同一个库。该库是用C编写的,我目前正在Windows上使用MinGW进行编译。我应该使用什么同步机制来同步非线程安全的本机库


提前谢谢

最简单的方法是使所有Java本机方法
静态同步

,这将稍微取决于库的结构。是完全不安全(即没有两个并发线程可以调用方法)还是并发访问同一数据不安全?如果是这样,公共数据可以封装在Java对象中,还是在库中保持静态?它是一个非常简单的库,只提供一些函数,但必须保持状态。对于调用库的每个客户端,状态只包含几个变量。@Joachim Isaksson:并发访问不是线程安全的。客户机将信息传递给库,库通常为客户机存储这些信息-它跟踪客户机所做的操作。所以原则上没有太多的比赛条件的可能性,但是,我只是想知道,使用pthread互斥体是否足以在哈希表中创建一个新条目,以便跟踪客户端操作。在多个Java进程加载同一个共享库的情况下,这有什么帮助?@Java42不同的进程将有完全不同的VM,因此JNI线程安全问题(当然,这是由于对JVM资源的共享访问)不应该适用。事实上,我认为共享库不会因为被多个进程加载而出现问题(例如,几乎每个进程都会加载现代操作系统上的一些系统调用库),除非共享库不安全地访问系统资源。