У меня есть «программа», которая работает как несколько независимых процессов, которые используют семафоры 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)
Каковы лучшие практики, когда дело доходит до управления переменными разных типов в общей памяти? Подходит ли вообще общая память?