ফরটেন এবং বেসিকের প্রথম দিনগুলিতে, সমস্ত প্রোগ্রামগুলি GOTO বিবৃতি সহ লেখা ছিল। ফলাফলটি স্প্যাগেটি কোড ছিল এবং সমাধানটি ছিল কাঠামোগত প্রোগ্রামিং।
একইভাবে, পয়েন্টারগুলিতে আমাদের প্রোগ্রামগুলিতে বৈশিষ্ট্যগুলি নিয়ন্ত্রণ করা কঠিন হতে পারে। সি ++ প্রচুর পয়েন্টার দিয়ে শুরু হয়েছিল তবে রেফারেন্স ব্যবহারের প্রস্তাব দেওয়া হচ্ছে। এসটিএলের মতো গ্রন্থাগারগুলি আমাদের কিছু নির্ভরতা হ্রাস করতে পারে। স্মার্ট পয়েন্টার তৈরির জন্য আইডিয়ামগুলিও রয়েছে যার আরও ভাল বৈশিষ্ট্য রয়েছে এবং সি ++ পারমিট রেফারেন্স এবং পরিচালিত কোডের কিছু সংস্করণ রয়েছে।
উত্তরাধিকার এবং পলিমারফিজমের মতো প্রোগ্রামিং অনুশীলনগুলি পর্দার আড়ালে প্রচুর পয়েন্টার ব্যবহার করে (ঠিক যেমন, কাঠামোগত প্রোগ্রামিং শাখার নির্দেশাবলীতে ভরা কোড তৈরি করে)। জাভা এর মতো ভাষাগুলি পয়েন্টারগুলি বাদ দেয় এবং প্রোগ্রামারদের উপর নির্ভর করে তাদের সমস্ত নতুন এবং বিবৃতি মুছে ফেলার জন্য গতিময়ভাবে বরাদ্দকৃত ডেটা পরিচালনা করতে আবর্জনা সংগ্রহ ব্যবহার করে।
আমার পড়াতে, আমি মাল্টি-প্রসেস এবং মাল্টি-থ্রেড প্রোগ্রামিংয়ের উদাহরণ দেখেছি যা সেমোফোরগুলি ব্যবহার করে বলে মনে হয় না। তারা কি একই জিনিসকে বিভিন্ন নামের সাথে ব্যবহার করে বা তাদের একযোগে ব্যবহার থেকে সংস্থান সংরক্ষণের কাঠামোর নতুন উপায় আছে?
উদাহরণস্বরূপ, মাল্টিকোর প্রসেসরের সাহায্যে বহুবিধ প্রোগ্রামিংয়ের জন্য সিস্টেমের একটি নির্দিষ্ট উদাহরণ হ'ল ওপেনএমপি। এটি সেমফোরগুলি ব্যবহার না করে নীচের মতো একটি সমালোচনামূলক অঞ্চলকে উপস্থাপন করে যা পরিবেশে অন্তর্ভুক্ত বলে মনে হয় না।
th_id = omp_get_thread_num();
#pragma omp critical
{
cout << "Hello World from thread " << th_id << '\n';
}
এই উদাহরণটি: http://en.wikedia.org/wiki/OpenMP থেকে প্রাপ্ত একটি উদ্ধৃতি
বিকল্পভাবে, ফাংশন ওয়েট () এবং সিগন্যাল () সহ সমুদ্রের ক্ষেত্রগুলি ব্যবহার করে একে অপরের কাছ থেকে থ্রেডগুলির অনুরূপ সুরক্ষা এ জাতীয় দেখতে পাওয়া যেতে পারে:
wait(sem);
th_id = get_thread_num();
cout << "Hello World from thread " << th_id << '\n';
signal(sem);
এই উদাহরণে, জিনিসগুলি বেশ সহজ, এবং কেবলমাত্র অপেক্ষা () এবং সিগন্যাল () কলগুলি মেলানো এবং এমনকি অনেকগুলি সান্নিধ্যের সাথে, থ্রেড সুরক্ষা সরবরাহ করার জন্য কেবল একটি সহজ পর্যালোচনা যথেষ্ট। তবে অন্যান্য অ্যালগরিদমগুলি আরও জটিল এবং একাধিক ফাংশন জুড়ে একাধিক সেমফোরাস (বাইনারি এবং গণনা উভয়) ব্যবহার করে জটিল শর্তাবলী সহ যা অনেক থ্রেড দ্বারা ডাকা যেতে পারে spread অচলাবস্থা তৈরি করা বা জিনিস থ্রেডকে নিরাপদ করতে ব্যর্থ হওয়ার পরিণামগুলি পরিচালনা করা কঠিন।
ওপেনএমপি-এর মতো এই সিস্টেমগুলি কি সেমোফোরগুলির সাথে সমস্যাগুলি দূর করে?
তারা কি সমস্যা অন্য কোথাও সরিয়ে নিয়েছে?
আর আমি সেমোফোরগুলি ব্যবহার না করার জন্য অ্যালগোরিদম ব্যবহার করে কীভাবে আমার প্রিয় সেম্যাফোরটি রূপান্তর করব?