একটি প্রধান বিষয় যা এখনও উল্লেখ করা হয়নি তা হ'ল কোনও বস্তুর স্থিতিস্থাপক হতে পারে এমন পদার্থের পরিচয় পাওয়া সম্ভব করে যা সেই রাজ্যটিকে অপরিবর্তনীয় করে তোলে ।
অনেক প্রোগ্রাম বাস্তব-বিশ্বের জিনিসগুলি অন্তর্নিহিত পরিবর্তনযোগ্য যা মডেল করার জন্য ডিজাইন করা হয়েছে। ধরুন, সকাল 12:51 টায় কিছু পরিবর্তনশীল AllTrucks
# 451 অবজেক্টের রেফারেন্স ধরে রেখেছে, যা একটি ডেটা স্ট্রাকচারের মূল যা এই মুহুর্তে (12:51 am) একটি বহরের সমস্ত ট্রাকে কার্গো কী রয়েছে তা নির্দেশ করে এবং কিছু পরিবর্তনশীল BobsTruck
# 24601 পয়েন্ট অবজেক্টের সাথে কোনও অবজেক্টের রেফারেন্স পেতে ব্যবহার করা যেতে পারে যা নির্দেশ করে যে এই মুহুর্তে (12:51 পূর্বাহ্নে) ববসের ট্রাকে কী কার্গো রয়েছে। সকাল 12:52 টায় কিছু ট্রাক (ববস সহ) লোড এবং আনলোড করা হয় এবং ডেটা স্ট্রাকচার আপডেট করা হয় যাতে AllTrucks
এখন এমন একটি ডেটা স্ট্রাকচারের রেফারেন্স রাখা হবে যা নির্দেশ করে যে 12:52 সকাল পর্যন্ত সমস্ত ট্রাকগুলিতে কার্গো রয়েছে।
কি হবে BobsTruck
?
যদি প্রতিটি ট্রাক অবজেক্টের 'কার্গো' সম্পত্তি অপরিবর্তনীয় থাকে তবে # 24601 অবজেক্টটি বরাবরের জন্য সকাল 12:51 তে রাষ্ট্রের প্রতিনিধিত্ব করবে Bob তাহলে BobsTruck
# 24601 আপত্তি একটি সরাসরি রেফারেন্স ঝুলিতে, তারপর যদি না কোডটি আপডেট AllTrucks
এছাড়াও আপডেট করতে ঘটবে BobsTruck
, এটা বব এর ট্রাক বর্তমান অবস্থা প্রতিনিধিত্ব করতে বন্ধ করে দিবে। আরও মনে রাখবেন যে যদি BobsTruck
না কোনও রূপ পরিবর্তনযোগ্য অবজেক্টের আকারে সংরক্ষণ করা হয়, তবে কোডটি আপডেট করে এমন একমাত্র উপায়টি AllTrucks
যদি কোডটি পরিষ্কারভাবে প্রোগ্রাম করার জন্য হয় med
যদি কেউ BobsTruck
সমস্ত বস্তুকে অপরিবর্তনীয় রাখার সময় রাষ্ট্র ববের ট্রাক পর্যবেক্ষণ করতে সক্ষম হতে চায় , তবে BobsTruck
একটি অপরিবর্তনীয় কাজ হতে পারে যা AllTrucks
কোনও নির্দিষ্ট সময়ে যে মূল্য রেখেছিল বা দেওয়া থাকলে তা ববের ট্রাকের স্থিতি অর্জন করতে পারে ঐ সময়. একটিতে এটি এক জোড়া অপরিবর্তনীয় কার্যাবলীও ধারণ করতে পারে - যার মধ্যে একটি উপরের মতো হবে, এবং অন্যটি একটি বহরের রাষ্ট্র এবং নতুন ট্রাক রাষ্ট্রের জন্য একটি রেফারেন্স গ্রহণ করবে এবং একটি নতুন বহরের রাষ্ট্রের একটি রেফারেন্স ফিরিয়ে দেবে যা পুরনোটির সাথে মিলেছে, ববের ট্রাকের সাথে নতুন রাজ্য থাকবে।
দুর্ভাগ্যক্রমে, ববসের ট্রাকের রাজ্যে যখনই কেউ এড়াতে চায় তখন এই জাতীয় ফাংশনটি ব্যবহার করা বিরক্তিকর ও জটিল হয়ে উঠতে পারে। একটি বিকল্প পন্থাটি বলতে হবে যে # 24601 অবজেক্টটি সর্বদা এবং চিরকাল থাকবে (যতক্ষণ না কেউ এতে উল্লেখ করে) ববের ট্রাকের বর্তমান অবস্থার প্রতিনিধিত্ব করে । কোড যা বারবার ববের ট্রাকের বর্তমান অবস্থানে অ্যাক্সেস করতে চাইবে প্রতিবার কিছু সময় গ্রহণকারী ক্রিয়াকলাপ চালাতে হবে না - এটি কেবলমাত্র একবার অনুসন্ধান ফাংশনটি করতে পারে যে # 24601 অবজেক্টটি ববসের ট্রাক, এবং এটির পরে সন্ধান করতে পারে ববসের ট্রাকের বর্তমান অবস্থাটি যে কোনও সময় দেখতে চাইলে অ্যাক্সেস করুন।
মনে রাখবেন যে একক থ্রেডযুক্ত পরিবেশে বা বহু-থ্রেডযুক্ত পরিবেশে কার্যকরী পদ্ধতির সুবিধা ছাড়াই নয়, যেখানে থ্রেডগুলি প্রায়শই কেবল ডেটা পরিবর্তন করার পরিবর্তে ডেটা পর্যবেক্ষণ করবে। কোনও পর্যবেক্ষক থ্রেড যা এতে থাকা অবজেক্টের রেফারেন্সটি অনুলিপি করেAllTrucks
এবং তারপরে প্রতিনিধিত্ব করা ট্রাক রাষ্ট্রগুলির পরীক্ষা করে দেখবে যে সমস্ত ট্রাকের অবস্থানটি যে মুহুর্তে তা রেফারেন্সটি গ্রহণ করেছে of যে কোনও সময় কোনও পর্যবেক্ষক থ্রেড নতুন ডেটা দেখতে চায়, এটি কেবলমাত্র রেফারেন্সটি দখল করতে পারে। অন্যদিকে, একটি বহনযোগ্য অবজেক্টের দ্বারা প্রতিনিধিত্ব করা বহরের পুরো রাজ্যটি দুটি থ্রেড একই সাথে বিভিন্ন ট্রাক আপডেট করার সম্ভাবনা হ্রাস করবে, যেহেতু প্রতিটি থ্রেড তার নিজস্ব ডিভাইসে রেখে গেলে একটি নতুন "বহর অবস্থা" অবজেক্ট তৈরি করে যা এতে অন্তর্ভুক্ত থাকে তার ট্রাকের নতুন রাষ্ট্র এবং একে অপরের পুরানো রাজ্য। প্রতিটি থ্রেড যদি পরিবর্তিত না হয় কেবল CompareExchange
আপডেট করার জন্য ব্যবহার করে AllTrucks
এবং ব্যর্থতার প্রতিক্রিয়া জানায় তবে সঠিকতা নিশ্চিত হতে পারেCompareExchange
এর রাষ্ট্রীয় অবজেক্টটি পুনরায় জেনারেট করে এবং অপারেশনটি পুনরায় চেষ্টা করার মাধ্যমে, তবে যদি একাধিক থ্রেড একই সাথে লেখার অপারেশন চেষ্টা করে, তবে সমস্ত রচনা একক থ্রেডে করা হয়ে থাকলে কর্মক্ষমতা সাধারণত খারাপ হয়; যত বেশি থ্রেড একই সাথে একযোগে পরিচালনার চেষ্টা করে, তত খারাপ কর্মক্ষমতা পাবেন।
যদি পৃথক ট্রাক অবজেক্টগুলি পরিবর্তনীয় হয় তবে অবিচ্ছিন্ন পরিচয় থাকে , তবে বহু-থ্রেড দৃশ্যটি আরও পরিষ্কার হয়ে যায়। যে কোনও ট্রাকে একটি সময়ে কেবল একটি থ্রেড চালানোর অনুমতি দেওয়া হতে পারে, তবে বিভিন্ন ট্রাকের মধ্যে চালিত থ্রেড হস্তক্ষেপ ছাড়াই এটি করতে পারে। অপরিবর্তনীয় বস্তু ব্যবহার করার সময়ও এমন কোনও আচরণ অনুকরণ করতে পারে এমন উপায় রয়েছে (উদাহরণস্বরূপ, "অলট্রিক্স" অবজেক্টগুলি সংজ্ঞায়িত করতে পারে যাতে XXX এর এসএসএসের ট্র্যাকের স্থিতি স্থাপনের জন্য কেবল একটি অবজেক্ট তৈরি করা প্রয়োজন যা "[সময়] অনুযায়ী," [XXX] এর মালিকানাধীন ট্রাকের অবস্থা এখন [এসএসএস]; অন্য সমস্ত কিছুর অবস্থা [অলট্রাক্সের পুরানো মান] "such এই জাতীয় বস্তু উত্পন্ন করা যথেষ্ট দ্রুত হবে যে এমনকি বিতর্ক উপস্থিতি উপস্থিত থাকলেও একটিCompareExchange
লুপটি বেশি সময় নেয় না। অন্যদিকে, এই জাতীয় ডেটা স্ট্রাকচার ব্যবহার করে কোনও নির্দিষ্ট ব্যক্তির ট্রাক সন্ধানের জন্য প্রয়োজনীয় সময়ের পরিমাণ যথেষ্ট পরিমাণে বাড়বে। অপরিবর্তনীয় পরিচয় সহ পরিবর্তনীয় বস্তু ব্যবহার করা সেই সমস্যাটিকে এড়িয়ে চলে।