Я пишу сервис, который использует JNA для делегирования работы с Java в собственную библиотеку C ++. Библиотека C ++ выполняет асинхронный вызов для вычислительно дорогой задачи, а затем получает обратный вызов (в другом потоке ОС), когда эта задача завершена. Я хотел бы перенаправить результат этой работы обратно в правильный поток в JVM.
Что мне интересно, так это то, могу ли я гарантировать, что у идентификатора потока JVM всегда будет однозначное соответствие с собственным thread_id? То есть если я записываю идентификатор потока в C ++ через
std::this_thread::get_id()
затем начните дорогую работу и заблокируйте на cv, что поток все еще будет там, когда работа будет завершена, и что я смогу правильно возвращать результаты в JVM. Будут ли какие-то закулисные JVM, такие как JIT, GC, или остановить мировые коллекции, поводом для беспокойства по поводу этого паттерна?