फोरट्रान और बेसिक के शुरुआती दिनों में, अनिवार्य रूप से सभी कार्यक्रम गोटो बयानों के साथ लिखे गए थे। परिणाम स्पेगेटी कोड था और समाधान संरचित प्रोग्रामिंग था।
इसी तरह, पॉइंटर्स को हमारे कार्यक्रमों में विशेषताओं को नियंत्रित करना मुश्किल हो सकता है। C ++ ने बहुत सारे पॉइंटर्स के साथ शुरुआत की, लेकिन संदर्भों के उपयोग की सिफारिश की जाती है। एसटीएल जैसे पुस्तकालय हमारी निर्भरता को कम कर सकते हैं। स्मार्ट पॉइंटर्स बनाने के लिए मुहावरे भी हैं जिनमें बेहतर विशेषताएं हैं, और सी ++ के कुछ संस्करण संदर्भ और प्रबंधित कोड हैं।
विरासत और बहुरूपता जैसे प्रोग्रामिंग अभ्यास पर्दे के पीछे बहुत सारे बिंदुओं का उपयोग करते हैं (बस के लिए, जबकि, संरचित प्रोग्रामिंग शाखा निर्देशों से भरा कोड उत्पन्न करता है)। जावा जैसी भाषाएं पॉइंटर्स को खत्म करती हैं और अपने सभी नए और स्टेटमेंट को मिटाने के लिए प्रोग्रामर पर निर्भर होने के बजाय गतिशील रूप से आवंटित डेटा को प्रबंधित करने के लिए कचरा संग्रह का उपयोग करती हैं।
मेरे पढ़ने में, मैंने बहु-प्रक्रिया और मल्टी-थ्रेड प्रोग्रामिंग के उदाहरण देखे हैं जो अर्ध-उपयोग नहीं करते हैं। क्या वे अलग-अलग नामों के साथ एक ही चीज़ का उपयोग करते हैं या क्या उनके पास समवर्ती उपयोग से संसाधनों की सुरक्षा के नए तरीके हैं?
उदाहरण के लिए, मल्टीकोर प्रोसेसर के साथ मल्टीथ्रेड प्रोग्रामिंग के लिए एक सिस्टम का एक विशिष्ट उदाहरण ओपनएमपी है। यह एक महत्वपूर्ण क्षेत्र का प्रतिनिधित्व करता है, जो कि अर्धचालक के उपयोग के बिना होता है, जो पर्यावरण में शामिल नहीं हैं।
th_id = omp_get_thread_num();
#pragma omp critical
{
cout << "Hello World from thread " << th_id << '\n';
}
इस उदाहरण से एक अंश है: http://en.wikipedia.org/wiki/OpenMP
वैकल्पिक रूप से, फ़ंक्शन प्रतीक्षा () और सिग्नल () के साथ सेमाफोर का उपयोग करके एक दूसरे से धागे की समान सुरक्षा इस तरह दिख सकती है:
wait(sem);
th_id = get_thread_num();
cout << "Hello World from thread " << th_id << '\n';
signal(sem);
इस उदाहरण में, चीजें बहुत सरल हैं, और बस एक साधारण समीक्षा प्रतीक्षा () और सिग्नल () कॉल से मेल खाने के लिए पर्याप्त है और यहां तक कि बहुत अधिक संगामिति के साथ, थ्रेड सुरक्षा प्रदान की जाती है। लेकिन अन्य एल्गोरिदम अधिक जटिल हैं और कई स्थितियों के साथ कई कार्यों में फैले कई सेमाफोर (बाइनरी और काउंटिंग दोनों) का उपयोग करते हैं जिन्हें कई थ्रेड्स कहा जा सकता है। गतिरोध पैदा करने या चीजों को सुरक्षित रखने में विफल रहने के परिणामों को प्रबंधित करना कठिन हो सकता है।
क्या OpenMP जैसे ये सिस्टम सेमाफोरस के साथ समस्याओं को खत्म करते हैं?
क्या वे समस्या को कहीं और ले जाते हैं?
अब मैं एल्गोरिथ्म का उपयोग करके अपने पसंदीदा सेमाफोर को कैसे परिवर्तित करूं जो कि सेमीफोर का उपयोग न करे?