두 프로그램간에 클래스의 인스턴스를 공유하려고합니다. 이것은 영광스러운 생산자 소비자 문제입니다. 그러나 추상화를 위해 클래스에 뮤텍스를 넣었습니다.힙에서 개체 공유
프로세스간에 구조체를 공유하는 경우가 있지만 일반적으로 포크가 관련되어 있습니다. 두 개의 서로 다른 일을하기 때문에 프로세스를 별도로 유지하고 싶습니다. 따라서 프로그램 \ 코드 세그먼트의 절반이 각 프로세스에서 낭비 될 것입니다.
설명하기가 쉽지 않을 수 있습니다.
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);
}
내가 정말로 찾고있는 것은이 클래스의 인스턴스를 포인터로 공유하는 방법입니다. 이렇게하면이 인스턴스에 액세스 할 수있는 스레드를 가질 수 있습니다. 얼마나 많은 공유를 원하기 때문에 스택이 아니라 힙을 사용해야합니다.
나는이 프로그램을 자체 프로그램으로 만든 다음 네트워킹이 얼마나 간단한지를 고려하여 상호 작용하는 것을 고려하지 않을 것입니다. 말할 필요도없이 이것은 정확하게 내가하는 일이 아닙니다. 그러나 나는 이것이 해결 될 수 있다면 간단하게 그것을 제 솔루션에 적용 할 수 있고 다른 사람들에게 도움이 될 수있는 단순화 된 충분한 예를 만들었다 고 생각합니다.
이번에도이 코드의 인스턴스를 두 개의 서로 다른 프로세스간에 공유하는 방법을 찾고 있습니다.
클래스에 링크 된 목록이 있기 때문에이 작업을 수행 할 수 있는지 여부는 잘 모르겠습니다. 가능한 경우 힙 및 파일 테이블을 채 웁니다 (둘 다?).
편집 :
지금까지 도움을 주셔서 감사합니다. 그러나 두 프로세스가 동시에 실행되지 않을 수도 있음을 지적 해 두어야합니다. 하나는 데몬 역할을하고 다른 하나는 간헐적으로 나타납니다. 두 프로그램 모두 이미 스레드를 가지고 있으므로 힙에서이 작업을 수행하려고합니다.
처음에는 허리가 없으며 포크에는 슈퍼 암소가 있습니다. 프로세스가 코드를 공유합니다. 두 번째 포크가 공유 메모리를 생성하지 못하면 공유 메모리를 할당해야합니다. –
이름이 공유 메모리입니다. –
http://stackoverflow.com/questions/13274786/how-to-share-memory-between-process-fork –