JNI & Multi Threads - PullRequest
       1

JNI & Multi Threads

1 голос
/ 05 мая 2011

У меня есть многопоточное приложение JAVA, которое использует общую библиотеку c.Что будет с этой библиотекой, если я получу доступ к ней из разных потоков?

Спасибо, Наум

1 Ответ

1 голос
/ 05 мая 2011

Это абсолютно зависит от библиотеки C. Если функция не хранит никакое состояние (например, просто вычисляет некоторый результат и использует только локальные переменные в стеке), будет безопасно использовать его из нескольких потоков. В противном случае вы должны позаботиться о том, чтобы состояние сохранялось отдельно для каждого потока, например, используя malloc и возвращая дескриптор для дальнейших вызовов, чтобы последующие вызовы повторно использовали состояние в блокированном блоке памяти.

Если я не знаю внутреннюю часть кода, я предпочитаю создавать небольшое приложение C и вызывать его с помощью Runtime.exec, но это полезно, только если функция C выполняет достаточно работы, чтобы оправдать накладные расходы exec.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...