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

"আমার আগের পাঠগুলিতে, আমি মাঝে মাঝে 'মিউটেক্স' এবং 'মনিটর' শব্দগুলি ব্যবহার করেছি, এখন তাদের অর্থ কী তা বলার সময় এসেছে।"

"আমি উত্কর্ণ."

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

"যখন একটি থ্রেড একটি বস্তুর মালিকানা নিতে চায়, এটি বস্তুর মিউটেক্সকে ব্যস্ত হিসাবে চিহ্নিত করে। এবং যখন এটি বস্তুর সাথে কাজ করা শেষ হয়, তখন এটি তার মিউটেক্সকে বিনামূল্যে হিসাবে চিহ্নিত করে।"

"অন্য কথায়, একটি মিউটেক্স দরজায় একটি 'ব্যস্ত/মুক্ত' চিহ্নের মতো?"

"হ্যাঁ। এবং এই ধরনের একটি মিউটেক্স জাভার প্রতিটি বস্তুর সাথে যুক্ত। শুধুমাত্র জাভা মেশিনের মিউটেক্সে সরাসরি অ্যাক্সেস রয়েছে। এটি প্রোগ্রামার থেকে লুকানো আছে।"

"তাহলে আমরা কীভাবে এটি ব্যবহার করব?"

"জাভাতে, আমরা একটি মনিটরের মাধ্যমে একটি মিউটেক্সের সাথে কাজ করতে পারি।"

"একটি মনিটর হল একটি বিশেষ প্রক্রিয়া (কোডের টুকরো) একটি মিউটেক্সের উপরে স্তরিত। এটি মিউটেক্সের সাথে সঠিক মিথস্ক্রিয়া নিশ্চিত করে। এটি একটি বস্তুকে ব্যস্ত হিসাবে চিহ্নিত করার জন্য যথেষ্ট নয়। এটি এখনও নিশ্চিত করার জন্য প্রয়োজনীয় যে অন্যান্য থ্রেডগুলি চেষ্টা করে না। ব্যস্ত বস্তু ব্যবহার করুন।"

"জাভাতে, মনিটরগুলি সিঙ্ক্রোনাইজড কীওয়ার্ড ব্যবহার করে প্রয়োগ করা হয়।"

"যখন আপনি একটি সিঙ্ক্রোনাইজড ব্লক লেখেন, জাভা কম্পাইলার এটিকে কোডের তিনটি টুকরো দিয়ে প্রতিস্থাপন করে:"

1) সিঙ্ক্রোনাইজড ব্লকের শুরুতে, কোড যোগ করা হয় যা মিউটেক্সকে ব্যস্ত হিসাবে চিহ্নিত করে।

2)  সিঙ্ক্রোনাইজড ব্লকের শেষে, কোড যোগ করা হয় যা মিউটেক্সকে বিনামূল্যে হিসেবে চিহ্নিত করে।

3)  সিঙ্ক্রোনাইজড ব্লকের আগে, কোড যোগ করা হয় যা, মিউটেক্স ব্যস্ত থাকলে, মিউটেক্স রিলিজ না হওয়া পর্যন্ত থ্রেডটিকে অপেক্ষা করতে দেয়।

"এটি মোটামুটি কীভাবে কাজ করে তা এখানে:"

কোড কিভাবে এটা কাজ করে বর্ণনা
synchronized(object)
{

object.doJob();

}
while (object.mutex)
Thread.sleep(1);

object.mutex = true;

object.doJob();

object.mutex = false;

মিউটেক্স যতক্ষণ ব্যস্ত থাকে ততক্ষণ থ্রেড ঘুমায়
(মিউটেক্স মুক্তি পেলে আমরা লুপ থেকে প্রস্থান করি)। মিউটেক্সকে ব্যস্ত হিসাবে চিহ্নিত করুন।

doTask ();

Mutex বিনামূল্যে হিসাবে চিহ্নিত করুন

"বাস্তবে, সেখানে যুক্তি ভিন্ন এবং আরও জটিল। কিন্তু এগুলো শুধুই বিবরণ।"

"আমি কি বিস্তারিত জানতে পারি?"

"যতক্ষণ না আপনি এটিকে সঠিকভাবে কীভাবে ব্যবহার করতে হয় তা শিখতে না পারলে, বিশদ বিবরণে জট পাওয়ার কোন মানে নেই।"

"কয়েকটি স্তর ফিরে আমি আপনাকে ট্রানজিশন তীর সহ সমস্ত থ্রেড স্টেটের একটি তালিকা এবং এই অবস্থাকে প্রভাবিত করে এমন পদ্ধতির একটি তালিকা দিয়েছিলাম। আপনার কি অনেক কিছু মনে আছে?"

"আসলে না। আমি এত তাড়াতাড়ি সব ভুলে যাই..."

"আপনি যত কম অনুশীলন করবেন, তত্ত্ব থেকে আপনি তত কম উপকৃত হবেন।"

"লেভেল 40 এর মধ্যে, আপনি এই সবগুলি কীভাবে ব্যবহার করতে হয় তা শিখবেন, এবং আমি ব্যাখ্যা করব যে এইগুলি আসলে কীভাবে কাজ করে। ইতিমধ্যে, শুধু এটিকে সঠিকভাবে ব্যবহার করতে শিখুন। বুঝলেন?"

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