Я пытаюсь разделить экземпляр класса между двумя программами. Это прославленная проблема потребителей производителей; однако для целей абстракции я добавил мьютекс в классе.Совместное использование объекта в куче
Я видел примеры совместного использования структур между процессами, но это обычно связано с вилкой. Я хочу, чтобы процессы были раздельными, потому что они будут делать две разные вещи, поэтому половина сегмента program \ code будет потрачена впустую на каждый процесс.
Это может быть проще показать, чем попытаться объяснить.
class my_class
{
private:
sem_t mutex;
data_type *my_data; //just some linked list
fstream some_file;
public:
my_class();
data_type* retrieve();
void add(string add);
};
my_class::my_class()
{
my_data = new data_type();
sem_init(&mutex, 0, 1);
my_file.open("log", ios::out);
}
data_type* my_class::retrieve()
{
data_type *temp = NULL;
sem_wait(&mutex);
if(my_data -> next != NULL)
{
temp = my_data;
my_data = my_data -> next;
}
sem_post(&mutex);
return my_data;
}
void my_class::add(string data)
{
data_type *temp = new data_type();
temp -> data = data;
data_type *top;
sem_wait(&mutex);
top = my_data;
while(top -> next -> next) //adds it to the end. The end's next is set to NULL
{
top = top -> next;
}
top -> next = temp;
my_file << name << "\n";
sem_post(&mutex);
}
Я действительно ищу способ поделиться экземпляром этого класса как указателя. Таким образом, я могу иметь потоки, которые могут получить доступ к этому экземпляру. Я думаю, из-за того, сколько я хочу сделать, он должен идти в кучу, а не в стек.
Я бы не стал рассматривать эту собственную программу, а затем использовать сеть i \ o для взаимодействия из-за того, насколько она проста. Излишне говорить, что это не совсем то, что я делаю; однако я думаю, что я сделал упрощенный пример с несколькими примерами: если это можно решить, я могу легко применить его к моему решению, и это может помочь другим.
Опять же, я ищу способ поделиться одним экземпляром этого кода между двумя отдельными процессами.
Я не знаю, может ли это быть сделано, потому что класс имеет связанный список, не говоря уже о файле. Если это возможно, то чья таблица кучи и файла заполняет (оба?).
EDIT:
Спасибо за помощь до сих пор; однако следует иметь в виду, что оба процесса могут не работать одновременно. Один действует как демон, а другой появляется с перерывами. Обе программы уже имеют потоки, поэтому я хочу сделать это в куче.
Сначала не будет талии, так как fork имеет супер корову: процессы будут делиться кодом. Вторая вилка не приводит к общей памяти, вам необходимо выделить общую память. –
Поиск по имени разделяемой памяти. –
http://stackoverflow.com/questions/13274786/how-to-share-memory-between-process-fork –