Как управлять безопасностью типов в общей памяти POSIX - PullRequest
0 голосов
/ 11 июля 2020

У меня есть «программа», которая работает как несколько независимых процессов, которые используют семафоры POSIX и разделяемую память для хранения и обмена общими переменными друг с другом. Проблема в том, что до сих пор это было реализовано как основная программа, которая устанавливает начальные значения переменных в общей памяти, а другие программы полагаются на получение права смещения адреса для доступа к данной переменной.

I хотел бы улучшить этот дизайн. У меня была идея собрать вместе все методы для доступа к общей памяти в разделяемой библиотеке и, возможно, иметь перечисление в качестве аргумента для метода GetVariable, что-то вроде этого

enum class SHMVariables: long 
{
  kVariable1 = address_offset_of_variable_1,
  kVariable2 = address_offset_of_variable_2,
  ... 
}

template <class T>
void GetVariable(SHMVariables var, T &) 
{ 
  // lock semaphore, do some memory boundary checks, and return the value of the variable
}

Проблема в том, что переменные могут иметь разные типы arithmeti c (некоторые из них являются определяемыми пользователем структурами с членами типа arithmeti c), и мне интересно, какой лучший подход может быть для управления безопасностью типов. Может ли карта помочь?

std::map<SHMVariables, std::size_t> // the value being assigned with something like sizeof(struct foo)

Каковы лучшие практики, когда дело доходит до управления переменными разных типов в общей памяти? Подходит ли вообще общая память?

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