Создание объекта в разделяемой памяти внутри Shared Lib (так) в C ++

StackOverflow https://stackoverflow.com/questions/281136

  •  07-07-2019
  •  | 
  •  

Вопрос

Можно ли разделить один экземпляр "бога" среди всех, кто ссылается на этот код, для помещения в общий объект?

god* _god = NULL;
extern "C" 
{

int set_log_level(int level)
{
    if(_god == NULL) return -1;
    _stb->log_level(level);
    return 0;
}

int god_init(){
    if(_god == NULL){
        _god = new god(); //Magic happens here
    }
}

}

При условии, что я выполняю синхронизацию блокировки в начале каждой функции, и учитывая, что сам Бог может создавать новые / malloc другие вещи, но эти вещи никогда не будут возвращаться самим вызывающей стороне (Бог mallocs только для внутреннего использования), что это самый простой способ сделать это, если это возможно.

Как это можно распространить на произвольное количество программ, связанных с этой общей библиотекой?

Это было полезно?

Решение

Библиотека Boost Interprocess имеет высокий уровень (er ) уровня, переносимые объекты совместно используемой памяти.

Другие советы

Это не совсем правильный подход. Делая то, что вы предлагаете, переменная, да, является глобальной для библиотеки и, следовательно, для программы, но данные являются частными для реального выполняющегося процесса. Вы не сможете поделиться значениями между запущенными программами. @grieve ссылается на глобальный доступ к нескольким потокам, но потоки совместно используют один и тот же экземпляр родительского процесса.

В реальных процессах вам необходимо перейти к использованию общей памяти для конкретной ОС. Подробнее читайте в Совместной памяти . Это выполнимая проблема, но это не особенно тривиально. Вам также понадобится система синхронизации между процессами, например, семафоры, чтобы координировать использование.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top