ডেডলক এড়ানোর কৌশল - ১

"হাই, অ্যামিগো!"

"আমি আপনাকে অচলাবস্থা এড়ানোর জন্য কয়েকটি কৌশল সম্পর্কে বলতে চাই।"

"সর্বোত্তম কৌশল হল একটি চিন্তাশীল স্থাপত্য এবং নিয়মগুলির একটি সেট যা নিয়ন্ত্রণ করে কখন এবং কোন ক্রমে আপনি লকগুলি ব্যবহার করতে পারেন (মিউটেক্সগুলি অর্জন করুন)। সমস্যার ক্লাসিক পদ্ধতি হল একটি লক শ্রেণিবিন্যাস বিকাশ করা এবং নিয়ম প্রতিষ্ঠা করা যে নির্দিষ্ট তালা কখনই হতে পারে না। এমন একটি রাজ্যে অর্জিত হয়েছে যেখানে কিছু অন্যান্য তালা ইতিমধ্যেই অধিগ্রহণ করা হয়েছে।"

"উদাহরণস্বরূপ, কখনও কখনও লকগুলিকে স্তরগুলি বরাদ্দ করা হয়, এবং উচ্চ স্তর থেকে নিম্ন স্তরের ক্রমানুসারে লকগুলি অর্জনের জন্য একটি থ্রেডের প্রয়োজন হয় (কিন্তু অন্য দিকে লকগুলি অর্জন করা অনুমোদিত নয়)৷ উপরন্তু, একই স্তরের সাথে একাধিক লক অর্জন করা হয় না৷ অনুমোদিত।"

"উদাহরণস্বরূপ, নাইটদের সাথে আগের উদাহরণে, আমরা প্রতিটি নাইটের সাথে একটি অনন্য সংখ্যা (আইডি) যোগ করতে পারি এবং বড় আইডি থেকে ছোট আইডিতে লকগুলি অর্জন করতে হবে।"

উদাহরণ
class KnightUtil
{
 public static void kill(Knight knight1, Knight knight2)
 {
  Knight knightMax = knight1.id > knight2.id ? knight1: knight2;
  Knight knightMin = knight1.id > knight2.id ? knight2: knight1;

  synchronized(knightMax)
  {
   synchronized(knightMin)
   {
    knight2.live = 0;
    knight1.experience +=100;
   }
  }
 }
}

"এটি একটি সুন্দর সমাধান।"

"এটি একটি খুব সহজ সমাধান, কিন্তু আমি এটি পছন্দ করি। আমি আশা করি এটি আপনার কাজে লাগবে যখন আপনি সম্ভাব্য অচলাবস্থার সমস্যার সমাধান করার বিষয়ে চিন্তা করছেন।"

"ধন্যবাদ, এলি।"