我試圖在兩個程序之間共享一個類的實例。這是一個榮耀的生產者消費者問題;然而,爲了抽象的目的,我在班上加了一個互斥體。在堆中共享對象
我見過在進程之間共享結構的實例,但這通常涉及到一個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 –