Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于NSRID的JNI互斥_Java_Cocoa_Multithreading_Java Native Interface_Mutex - Fatal编程技术网

Java 基于NSRID的JNI互斥

Java 基于NSRID的JNI互斥,java,cocoa,multithreading,java-native-interface,mutex,Java,Cocoa,Multithreading,Java Native Interface,Mutex,我有一些objective-c代码,它使用NSLock实现某种事务。对象被锁定在“开始事务”上,在锁定到位的情况下进行其他几个调用,然后通过“提交”将其释放。我正在编写一个JNI粘合层来从Java访问这段代码,但是锁在JNI和纯objc代码中的行为不同 我在Java和objc中都有单元测试,用于测试生成锁的代码。objc测试通过,但在Java测试中,[anNSLock tryLock]返回false,即使没有调用[anNSLock lock] 在JNI中有没有一种推荐的互斥方式?我不确定NSLo

我有一些objective-c代码,它使用NSLock实现某种事务。对象被锁定在“开始事务”上,在锁定到位的情况下进行其他几个调用,然后通过“提交”将其释放。我正在编写一个JNI粘合层来从Java访问这段代码,但是锁在JNI和纯objc代码中的行为不同

我在Java和objc中都有单元测试,用于测试生成锁的代码。objc测试通过,但在Java测试中,[anNSLock tryLock]返回false,即使没有调用[anNSLock lock]

在JNI中有没有一种推荐的互斥方式?我不确定NSLock的底层机制是什么

谢谢

的文档说NSLock使用Posix线程。Java使用Posix线程吗


有两种选择:第一种是用Java为对象创建一个同步包装器。第二种方法是使用JNI MonitorEnter和MonitorExit方法进行同步。

感谢您的建议。我认为下面的页面会很有帮助,因为除了MonitorEnter之外,它还讨论了互斥体等。我认为我的问题有点不清楚(synchronize可能是一个解决方案,但monitor enter/exit可以工作)。我将第一部分改写为:“我有一些objective-c代码,它使用NSLock实现某种事务。对象在“开始事务”上被锁定,在锁定到位的情况下进行其他几个调用,然后通过“提交”将其释放。然后MonitorEnter和MonitorExit应该为您完成这项工作。