Удаленный прокси с общей памятью в C ++ - PullRequest
0 голосов
/ 26 мая 2009

Предположим, у меня есть демон, который делится своим внутренним состоянием с различными приложениями через общую память. Процессы могут отправлять сообщения IPC демону по именованному каналу для выполнения различных операций. В этом сценарии я хотел бы создать класс-оболочку C ++ для клиентов, который действует как своего рода «Удаленный прокси», чтобы скрыть некоторые подробности (синхронизация, передача сообщений и т. Д.) От клиентов и упростить изоляцию кода модульные тесты.

У меня три вопроса:

  • Как правило, это хорошая идея / подход?
  • Есть ли у вас какие-либо советы или рекомендации по синхронизации в этой настройке, или достаточно использовать стандартную настройку мьютекса для чтения-записи?
  • Есть ли какие-то рамки, которые я должен рассмотреть?

Рассматриваемая цель - встроенная система linux с ядром 2.18, поэтому существуют ограничения на память и функции компилятора.

Ответы [ 2 ]

2 голосов
/ 27 мая 2009

У Херба Саттера была статья Обмен корнем всех споров , с которым я в целом согласен; если вы используете архитектуру разделяемой памяти, вы подвергаете себя небольшому количеству потенциальных проблем с многопоточностью.

Модель клиент / сервер может существенно упростить ситуацию, когда клиенты записывают в именованный канал сервера, а сервер выполняет обратную запись в уникальный канал клиента (или использует сокеты). Это также упростило бы модульное тестирование (поскольку вам не нужно беспокоиться о тестировании разделяемой памяти), могло бы избежать мьютексирования и т. Д.

1 голос
/ 26 мая 2009

Есть Boost.Interprocess библиотека, хотя я не могу комментировать ее пригодность для встроенных систем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...