C ++ Общая память, необходимая для прохождения очереди std :: strings через JNI? - PullRequest
1 голос
/ 19 мая 2011

Я пытаюсь понять, каков механизм получения строки из демона c ++, который я написал в Java для использования в пользовательском интерфейсе.Я опубликую картину того, что я представляю, затем продолжу вопрос:

enter image description here

Здесь я вижу две проблемы:

1)Семафор должен быть доступен для библиотеки.В Windows это можно было бы сделать с помощью именованного семафора и доступа к его дескриптору.В Linux я был нацелен на использование семафора в разделяемой памяти и информирование об этом процессов через ключ к разделяемой памяти.Для меня это неопределенно, но сработает ли эта концепция для синхронизации Java и демона?

2) Нужно ли размещать очередь в разделяемой памяти, чтобы заставить работать ссылку ??? в диаграмме выше?Может и должна ли очередь находиться в .so?

Так что это мои заботы.Я буду рад любой помощи, вызовам и просьбам о здравомыслии и буду рад предоставить всю необходимую дополнительную информацию.Заранее спасибо.

1 Ответ

0 голосов
/ 08 июня 2011

Вы запускаете оба приложения в отдельном процессе, в vanilla Linux это означает, что вы не можете обмениваться данными между этими процессами напрямую через память.Java VM - это процесс, а демон C ++ - это процесс.Он находится в отдельных местах памяти, которые, между прочим, зашифрованы менеджером памяти (MMU).Таким образом, нет никакого способа получить доступ к памяти.

Google на «внутреннем процессе связи», если хотите.Я предпочитаю работать с socketpair для двунаправленного общения между родителями и детьми.

...