我试图在两个程序之间共享一个类的实例。这是一个荣耀的生产者消费者问题;然而,为了抽象的目的,我在班上加了一个互斥体。在堆中共享对象
我见过在进程之间共享结构的实例,但这通常涉及到一个fork。我想保持这些流程是分开的,因为它们会做两件不同的事情,所以程序\代码段的一半将在每个流程中浪费。
它可能比试图解释更容易显示。
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);
}
什么我真正需要的是分享这一类为指针的实例的方式。这样,我就可以拥有可以访问此实例的线程。我想因为我想要做多少共享,它需要堆积如山,而不是堆栈。
我不会考虑制作它自己的程序,然后使用网络我\ o互动,因为它是多么简单。不用说,这不完全是我正在做的;但是我认为我已经做了一个简单的\通用的示例,如果这可以解决,那么我可以很容易地将它应用到我的解决方案,它可能会帮助其他人。
同样,我正在寻找一种方法在两个独立的进程之间共享此代码的一个实例。
我不知道这是否可以完成,因为类中有一个链表,更不用说它里面的文件了。如果可以的话,那么它的堆和文件表就会填满(两者?)。
编辑:
感谢您的帮助迄今为止;然而,值得指出的是,这两个进程可能不会同时运行。一个用作守护进程,另一个间歇出现。两个程序都已经有线程,所以这就是为什么我想在堆上做的。
首先不会有腰,因为叉具有超级奶牛的力量:过程将共享代码。第二个叉不会导致共享内存,您需要分配共享内存。 –
查找命名共享内存。 –
http://ricackoverflow.com/questions/13274786/how-to-share-memory-between-process-fork –