আমি মনে করি না যে কেউ আসলেই প্রশ্নের উত্তর দিয়েছে , তাই আমি এটি দিয়ে চেষ্টা করব।
উদ্বায়ী এবং প্রথমগুলি if (instance == null)
"প্রয়োজনীয়" নয়। লকটি এই কোডটি থ্রেড-নিরাপদ করে তুলবে।
সুতরাং প্রশ্নটি: আপনি কেন প্রথম যুক্ত করবেন if (instance == null)
?
কারণটি সম্ভবত কোডের লক করা বিভাগটি অকারণে চালানো এড়ানো নয়। আপনি লকের অভ্যন্তরে কোডটি সম্পাদন করার সময়, অন্য কোনও থ্রেড যা সেই কোডটি কার্যকর করতে চেষ্টা করে তা অবরুদ্ধ করা আছে, যা আপনি যদি অনেক থ্রেড থেকে ঘন ঘন সিঙ্গলটন অ্যাক্সেস করার চেষ্টা করেন তবে আপনার প্রোগ্রামটি ধীর করবে। ভাষা / প্ল্যাটফর্মের উপর নির্ভর করে লকটি নিজে থেকে এড়ানো যেতে পারে যা আপনি এড়াতে চান।
সুতরাং আপনার তালার দরকার আছে কিনা তা দেখার জন্য প্রথম নাল চেকটি সত্যই দ্রুত উপায় হিসাবে যুক্ত করা হয়েছে। আপনার যদি সিঙ্গলটন তৈরি করার প্রয়োজন না হয় তবে আপনি লকটি পুরোপুরি এড়াতে পারবেন।
তবে আপনি কোনওভাবে লক না করে রেফারেন্সটি বাতিল কিনা তা পরীক্ষা করতে পারবেন না, কারণ প্রসেসরের ক্যাশে হওয়ার কারণে, অন্য থ্রেড এটি পরিবর্তন করতে পারে এবং আপনি একটি "বাসি" মান পড়বেন যা আপনাকে অকারণে লকটিতে প্রবেশ করতে পরিচালিত করবে। তবে আপনি একটি লক এড়ানোর চেষ্টা করছেন!
সুতরাং আপনি লক ব্যবহারের প্রয়োজন ছাড়াই সর্বশেষ মানটি নিশ্চিত করে তা নিশ্চিত করতে আপনি সিঙ্গলটনকে অস্থির করে তুলছেন।
আপনার এখনও অভ্যন্তরীণ লকটি প্রয়োজন কারণ অস্থির কেবলমাত্র ভেরিয়েবলের একক অ্যাক্সেসের সময় আপনাকে রক্ষা করে - আপনি লকটি ব্যবহার না করে এটিকে নিরাপদে পরীক্ষা করতে এবং সেট করতে পারবেন না।
এখন, এটি কি আসলে কার্যকর?
আচ্ছা আমি বলব "বেশিরভাগ ক্ষেত্রে, না"।
যদি সিঙ্গেলটন.আইন্সটেন্স লকগুলির কারণে অদক্ষতার কারণ হতে পারে, তবে আপনি কেন এত ঘন ঘন এই ফোন করছেন যে এটি একটি উল্লেখযোগ্য সমস্যা হবে ? সিঙ্গলটনের পুরো বক্তব্যটি কেবলমাত্র একটি, তাই আপনার কোডটি একবারে সিঙ্গলটন রেফারেন্সটি পড়তে এবং ক্যাশে করতে পারে।
কেবলমাত্র এই ক্ষেত্রেটিই ভাবতে পারি যেখানে এই ক্যাচিং সম্ভব হবে না যখন আপনার প্রচুর পরিমাণে থ্রেড থাকবে (যেমন প্রতিটি অনুরোধ প্রক্রিয়া করার জন্য একটি নতুন থ্রেড ব্যবহার করে এমন একটি সার্ভার লক্ষ লক্ষ স্বল্প-চলমান থ্রেড তৈরি করতে পারে) যা একবার সিঙ্গলটন.ইনস্ট্যান্স কল করতে হবে)।
সুতরাং আমি সন্দেহ করি যে ডাবল চেকড লক করা এমন একটি প্রক্রিয়া যা খুব নির্দিষ্ট পারফরম্যান্স-সমালোচনামূলক ক্ষেত্রে সত্যিকারের স্থান পায় এবং তারপরে প্রত্যেকে "এটি করার সঠিক উপায় এটি" ব্যান্ডউইগানকে আসলে কী করে তা ভেবে চিন্তিত না করেই তা দৃmb়ভাবে উচ্চারিত হয়েছে। তারা এটির জন্য ব্যবহার করছে সেই ক্ষেত্রে আসলে এটি প্রয়োজনীয় হবে।