Моя проблема заключается в следующем;У меня есть класс, который использует нестатические собственные методы для связи через последовательный порт
public class Serial{
final static int NOT_INITIALIZED = 0;
final static int INITIALIZED = 1;
private int instanceId;
private String errorString;
private native int initPort(String port);
private native int termPort(int instanceId);
private native int getState(int instanceId);
private native int readPort(int instanceId);
private native int writePort(int instanceId);
/*... publically accessible methods follow */
}
Таким образом, можно создать несколько классов, каждый с определенным последовательным портом.Причина, по которой я так поступаю, заключается в том, что он позволяет вам установить поле errorString из кода JNI (когда возникает ошибка) для экземпляра, который вызвал код JNI.
Я узнал, что несколько экземпляров в одной и той же JVM будут использовать одну и ту же библиотеку JNI.Таким образом, любые глобальные переменные, определенные в dll, будут совместно использоваться несколькими экземплярами.По этой причине дескрипторы связи и переменные состояния хранятся в глобальном массиве структур.Когда вызывается initPort (), поле instanceId устанавливается на индекс массива, который содержит дескриптор порта и состояние (INITIALIZED или NOT_INITIALIZED).
Что я не понимаю, так это то, как функции dll совместно используются несколькими экземплярами.Каждый из них получает свою собственную копию функции или вызовет одну и ту же функцию одновременно и вызовет ошибки?