Java, C ++, NIO, mmaped буфер, синхронизация - PullRequest
2 голосов
/ 10 января 2010

Экспозиция:

Я нахожусь на Linux / Mac.

Часть моего кода на Java, часть моего кода на C ++.

Для быстрой связи они оба имеют один и тот же файл.

Я хочу синхронизировать код Java & C ++.

Я знаю следующее:

1) учитывая два потока в Java, я могу использовать блокировки / мониторы.

2) учитывая один кусок кода на Java, один на C ++, я могу их синхронизировать по tcp / ip

3) учитывая два фрагмента кода C ++, которые отображают область памяти, я могу синхронизировать их, используя gcc's Compare_and_swap для целого числа в области mmaped.

Вопрос:

Учитывая, что часть моего кода на Java, часть моего кода на C ++, могу ли я как-то сделать (3) - поддерживает ли JVM какой-либо тип атомарного сравнения и обмена? Так что и мой код на Java и C ++ может использовать это целое число как своего рода блокировку?

Спасибо!

1 Ответ

2 голосов
/ 10 января 2010

Вы можете написать небольшую библиотеку C / C ++, единственной целью которой является синхронизация с вашим кодом C ++ (с использованием обычных объектов синхронизации IPC). Тогда вы могли бы получить эту библиотеку из вашего Java-процесса с использованием JNI.

...