Если вы вызываете код C ++ из нескольких потоков, а код C ++ имеет глобальные статические переменные, было бы замечательно, если бы он работал.Самое простое, что можно попробовать - это поставить блокировку вокруг вызова, то есть на стороне Java изменить
native int callToCppFunction(int parameter);
на
synchronized native int callToCppFunction(int parameter);
, чтобы в C ++ мог быть только один потоккод за раз.
Тогда есть еще одна возможная проблема, с которой я столкнулся около года назад: по-видимому, в Windows dll ее может быть недостаточно для сериализации обращений к ней (т.е. использовать synchronized
).Они также могут требовать, чтобы каждый раз из одного и того же потока вызывался . Этот ответ предлагает объяснение того, как это может быть.Решение состоит в том, чтобы сделать однопотокового исполнителя на стороне Java и направить через него все вызовы в нативный код.