Мьютекс в JNI с использованием Foundation NSLock - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть некоторый код Objective-C, который использует NSLock для реализации своего рода транзакции. Объект заблокирован в «транзакции начала», несколько других вызовов выполняются с установленной блокировкой, а затем он освобождается с помощью «фиксации». Я пишу слой клея JNI для доступа к этому коду из Java, но в JNI и чистом объектном коде блокировка ведет себя по-другому.

У меня есть модульные тесты на Java и objc, которые осуществляют код, который делает блокировку. Тест objc проходит, но в тесте Java [anNSLock tryLock] возвращает false, хотя [anNSLock lock] не был вызван.

Есть ли рекомендуемый способ иметь мьютекс в JNI? Я не уверен, каков основной механизм NSLock.

Спасибо!

1 Ответ

1 голос
/ 15 декабря 2009

Документы для NSLock говорят, что NSLock использует потоки Posix. Использует ли Java потоки Posix?

Пара альтернатив: первое - создать синхронизированную оболочку на Java для вашего объекта. Второе - использовать методы синхронизации JNI MonitorEnter и MonitorExit для синхронизации.

...