একটি থ্রেড-নিরাপদ সংগ্রহ বনাম একটি থ্রেডসেফ-সংগ্রহ অন্যরকমভাবে দেখা যায়।
চেকআউট ব্যতীত কোনও কেরানিবিহীন কোনও দোকান বিবেচনা করুন। লোকেরা যদি দায়িত্বশীলতার সাথে কাজ না করে তবে আপনার অনেক সমস্যা রয়েছে। উদাহরণস্বরূপ, ধরা যাক কোনও গ্রাহক পিরামিড-ক্যান থেকে একটি ক্যান গ্রহণ করেন এবং বর্তমানে একজন কেরানী পিরমিডটি তৈরি করছেন, সমস্ত নরক আলগা হয়ে যায়। বা, যদি দুটি গ্রাহক একই সাথে একই আইটেমে পৌঁছায় তবে কে জিতবে? লড়াই হবে? এটি একটি থ্রেডসেকফ-সংগ্রহ। সমস্যাগুলি এড়াতে প্রচুর উপায় রয়েছে তবে সেগুলির জন্য কোনও একরকম লকিং বা অন্য কোনও উপায়ে সুস্পষ্ট অ্যাক্সেসের প্রয়োজন।
অন্যদিকে, কোনও ডেস্কে কেরানি দিয়ে একটি দোকান বিবেচনা করুন এবং আপনি কেবল তার মাধ্যমে কেনাকাটা করতে পারেন। আপনি লাইনে দাঁড়ান এবং তাকে কোনও জিনিস জিজ্ঞাসা করেন, তিনি এটি আপনার কাছে ফিরিয়ে আনেন এবং আপনি লাইন থেকে বাইরে চলে যান। আপনার যদি একাধিক আইটেমের প্রয়োজন হয় তবে আপনি প্রতিটি রাউন্ডট্রিপগুলিতে কেবল যতগুলি আইটেম মনে করতে পারেন তা বেছে নিতে পারেন, তবে কেরানিটিকে হগিং এড়াতে আপনার সাবধানতা অবলম্বন করা উচিত, এটি আপনার পিছনে থাকা অন্যান্য গ্রাহকদের রেগে যাবে anger
এখন এই বিবেচনা করুন। একজন কেরানির সাথে দোকানে, আপনি যদি লাইনের সামনের দিকে যেতে পারেন এবং সেই ক্লারিকে "আপনার কি কোনও টয়লেট পেপার আছে" জিজ্ঞাসা করুন, এবং তিনি "হ্যাঁ" বলেছেন, এবং তারপরে আপনি "ঠিক আছে, আমি" যাই আমি যখন আপনার কতটা প্রয়োজন জানি তখন আপনার কাছে ফিরে আসব ", তারপরে আপনি যখন লাইনের সামনের দিকে ফিরে আসবেন, তখন অবশ্যই স্টোরটি বিক্রি হয়ে যাবে। থ্রেডসেফ সংগ্রহ দ্বারা এই দৃশ্যটি প্রতিরোধ করা হয়নি।
একটি থ্রেডস্যাফ সংগ্রহটি গ্যারান্টি দেয় যে এর অভ্যন্তরীণ ডেটা স্ট্রাকচারগুলি সর্বদা বৈধ, এমনকি একাধিক থ্রেড থেকে অ্যাক্সেস করা হলেও।
কোনও থ্রেডস্যাফের সংগ্রহ এ জাতীয় কোনও গ্যারান্টি সহ আসে না। উদাহরণস্বরূপ, আপনি যদি একটি থ্রেডে বাইনারি গাছের সাথে কিছু যুক্ত করেন, অন্য থ্রেডটি গাছটি পুনরায় ভারসাম্য করতে ব্যস্ত থাকে তবে আইটেমটি যুক্ত হওয়ার কোনও নিশ্চয়তা নেই, বা গাছটি তারপরেও বৈধ রয়েছে তার পরেও এটি আশার বাইরে দুর্নীতিগ্রস্থ হতে পারে।
কোনও থ্রেডসেফ সংগ্রহটি গ্যারান্টি দেয় না যে থ্রেডের ক্রমিক ক্রিয়াকলাপগুলি সমস্ত তার অভ্যন্তরীণ ডেটা কাঠামোর একই "স্ন্যাপশট" এ কাজ করে, যার অর্থ এই যে আপনার যদি কোডটি থাকে তবে:
if (tree.Count > 0)
Debug.WriteLine(tree.First().ToString());
আপনি একটি নালরফেরান এক্সেপশন পেতে পারেন কারণ অভ্যন্তর tree.Count
এবং tree.First()
অন্য একটি থ্রেড গাছের অবশিষ্ট নোডগুলি সাফ করেছে, যার অর্থ First()
ফিরে আসবে null
।
এই দৃশ্যের জন্য, আপনাকে জিজ্ঞাসা করা কালেকশনটি যা চান তা পাওয়ার নিরাপদ উপায় আছে কিনা তা আপনাকে দেখতে হবে, সম্ভবত আপনাকে উপরের কোডটি আবার লিখতে হবে, অথবা আপনাকে লক করতে হতে পারে।