मैंने पहले से ही एक ही पोस्ट को देखा जो मुझे मिल सकता था, लेकिन यह वह नहीं था जिसे मैं ढूंढ रहा था।फोर्क के साथ साझा मेमोरी का उपयोग करना()
असल में, मैं Odd-Even Sort को फोर्किंग के साथ चलाने की कोशिश कर रहा हूं, इसलिए बच्चा बाधाओं को चलाता है और माता-पिता भी शाम को चलाता है। इन दोनों को वेक्टर इनपुट वैल्यूज के साथ-साथ बूलियन सॉर्ट किए जाने की आवश्यकता होती है।
निम्नलिखित कोड स्मृति साझा करने में मेरी असफल प्रयासों के किसी भी बिना है, और खोज एल्गोरिथ्म के साथ कांटे प्रयोग करने के लिए सिर्फ बुनियादी ढांचा है:
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;
}
}
मैं इस साझा करने बाहर हैकिंग के कई तरीके की कोशिश की है स्मृति का, लेकिन कोई भी संसाधन नहीं ढूंढ सकता जो वास्तव में बताता है कि यह कैसे काम करता है, मुझे क्या चाहिए, और इसे करने का सबसे अच्छा तरीका है।
तो, मेरी आवश्यकताओं इस प्रकार हैं:
- माता-पिता और बच्चे का हिस्सा है और एक वैश्विक वेक्टर और हेरफेर करने के लिए सक्षम होना चाहिए बूलियन
- यह एक पाश में चलाने के लिए सक्षम दिखाया गया है होना चाहिए
- इस चर के साथ काम करना चाहिए मुख्य में() इस्तेमाल किया जा रहा है और स्वैप() फ़ंक्शन
में आप कोई सुझाव है, मैं बहुत उन्हें इसकी सराहना करेंगे। धन्यवाद!
'shm_open' POSIX API कॉल के लिए मैन पेज पर एक नज़र डालें। आप एक साझा-मेमोरी क्षेत्र बनाना चाहते हैं, और वहां दोनों प्रक्रियाओं द्वारा उपयोग किए गए किसी भी चर को डालना चाहते हैं। आप इसे आसानी से 'mmap' कॉल के साथ भी कर सकते हैं। अपने एक्सेस को थ्रेड-सुरक्षित बनाने के लिए सुनिश्चित करें ... साझा मेमोरी का उपयोग करने में निहित कोई लॉकिंग नहीं है, इसलिए आपको ध्यान रखना होगा। – Borealid
'shm_open' के साथ ध्यान में रखें, आपको साझा स्मृति ऑब्जेक्ट के लिए स्थान आवंटित करने के लिए' ftruncate' को कॉल करने की आवश्यकता होगी, इसलिए फिर, स्मृति ऑब्जेक्ट में स्थान गतिशील रूप से बढ़ेगा जैसे आप 'std :: vector'। यदि आपको अधिक जगह चाहिए तो आपको रनटाइम पर साझा मेमोरी ऑब्जेक्ट का आकार मैन्युअल रूप से प्रबंधित करना होगा। – Jason
यह स्पष्ट रूप से सी कोड नहीं है। – Puppy