Zaten bulabildiğim tek gönderiye baktım, ama aradığım şey bu değildi.Paylaşılan belleği fork() ile kullanma
Temel olarak, Odd-Even Sort'u forking ile çalıştırmaya çalışıyorum, bu nedenle çocuk oranlar çalıştırıyor ve üstler evensleri çalıştırıyor. Bunların ikisi de vektör inputValues'in ve boole sıralamasının paylaşılmasını gerektirir.
Aşağıdaki kod hafızayı paylaşan benim başarısız girişimleri hiçbiri olmadan ve arama algoritması ile çatalları kullanmak için sadece temel çerçeve: Bu paylaşımı dışarı hack için birden fazla yol denedim
while(!sorted)
{
pID = fork();
sorted = true;
cout << "Sort set to TRUE." << endl;
if(pID == 0)
{
int num = 1;
cout << "Child swap run" << endl;
Swap((void *) num);
cout << "Status: " << ((sorted) ? "SORTED" : "UNSORTED") << endl;
exit(0);
}
else if(pID < 0)
{
cout << "Failed to fork." << endl;
exit(1);
}
else
{
wpid = waitpid(pID, &status, waitStatus);
int num = 0;
cout << "Parent swap run" << endl;
Swap((void *) num);
cout << "Status: " << ((sorted) ? "SORTED" : "UNSORTED") << endl;
}
}
Bellek, ancak NASIL çalıştığı, neye ihtiyacım olduğunu ve bunu yapmanın en iyi yolunu gerçekten açıklayan herhangi bir kaynak bulamıyor. aşağıdaki gibi
Yani, benim gereksinimleri:
- ebeveyn ve çocuk global vektör ve paylaşmak ve işlemek gerekir boole gösterildiği gibi bu bir döngü içinde çalıştırmak gerekir
- Bu değişkenlerle çalışmalıdır ana içinde() kullanılıyor ve herhangi bir ipucu varsa takas() fonksiyonu
yılında, onları büyük ölçüde takdir ediyorum. Teşekkürler!
'shm_open' POSIX API çağrısı için man sayfasına bakın. Paylaşılan bellek bölgesi oluşturmak ve oradaki her iki işlem tarafından erişilen değişkenleri koymak istiyorsunuz. Bunu kolayca 'mmap' çağrısı ile de yapabilirsiniz. Erişiminizi iş parçacığı için güvenli hale getirdiğinizden emin olun ... Paylaşılan belleği kullanmanın sakıncası yoktur, bu yüzden dikkatli olmalısınız. – Borealid
"shm_open" ile aklınızda bulundurun, sonra paylaşılan bellek nesnesi için alan ayırmak için 'ftruncate' olarak adlandırmanız gerekecek, bu nedenle bellek nesnesindeki boşluk dinamik olarak bir std :: vector'. Daha fazla alana ihtiyacınız varsa, çalışma zamanında paylaşılan bellek nesnesinin boyutunu manuel olarak yönetmeniz gerekir. – Jason
Bu açıkça C kodu değil. – Puppy