উদ্বায়ী C++

Udbayi C

'ব্যবহারকারী-স্পেস অ্যাপ্লিকেশনগুলির বিকাশকারীদের সর্বদা প্রাসঙ্গিক কম্পাইলার ম্যানুয়ালগুলি উল্লেখ করা উচিত যে বিভিন্ন প্রসঙ্গে কীভাবে কোয়ালিফায়ার পরিচালনা করা যেতে পারে কারণ উদ্বায়ী কীওয়ার্ড আচরণকে সাধারণত হার্ডওয়্যার-নির্ভর হিসাবে দেখা উচিত। যখন একটি বস্তু উদ্বায়ী হিসাবে চিহ্নিত করা হয়, তখন কম্পাইলারকে প্রায়ই জানানো হয় যে এটি কখনই লোড অপারেশনের জন্য অপ্টিমাইজ করা উচিত নয় এবং সর্বদা রেজিস্টার বা ক্যাশের পরিবর্তে প্রাথমিক মেমরি থেকে পুনরুদ্ধার করা উচিত। যাইহোক, যখন কম্পাইলার মেমরির অবস্থানটি রেজিস্টারে রাখার চেষ্টা করে, তখন এটি স্বয়ংক্রিয়ভাবে ক্যাশে হয়ে যায় যদিও সেখানে অসংখ্য স্তরের ক্যাশে রয়েছে যা সফ্টওয়্যারের জন্য অনুপলব্ধ এবং শুধুমাত্র হার্ডওয়্যারে রক্ষণাবেক্ষণ করা হয়। ফলস্বরূপ, অভিন্ন মেমরি অবস্থানের তুলনায় সিপিইউ-এর কাছাকাছি ক্যাশে লাইন থেকে RAM অনেক গুণ দ্রুত অ্যাক্সেস করা যায়।

সমস্যাগুলি ঘটতে পারে যদি আমরা একটি উদ্বায়ী কোয়ালিফায়ার ব্যবহার না করি যাতে অন্তর্ভুক্ত থাকে, যখন অপ্টিমাইজেশান সক্ষম করা থাকে, কোডটি প্রত্যাশা অনুযায়ী কাজ নাও করতে পারে। যখন বাধাগুলি ব্যবহার করা হয় এবং সক্রিয় করা হয়, কোডটি পরিকল্পনা অনুযায়ী কাজ করতে পারে না। পাওয়ার চালু থাকা অবস্থায় শুধুমাত্র অস্থির সঞ্চয়স্থানে ডেটা রাখা হয়। সরবরাহ মুছে ফেলা হলে, ডেটা ক্ষতি ঘটে।

যাইহোক, বিদ্যুৎ চলে গেলেও অ-উদ্বায়ী স্টোরেজ ডেটা রাখে। প্রক্রিয়া তথ্য সংক্ষিপ্তভাবে উদ্বায়ী সঞ্চয়স্থানে সংরক্ষণ করা হয় কারণ এটি অ-উদ্বায়ী সঞ্চয়ের তুলনায় যথেষ্ট দ্রুত। অ-উদ্বায়ী সঞ্চয়স্থানের বিপরীতে, সংবেদনশীল ডেটা সুরক্ষিত করার জন্য উদ্বায়ী স্টোরেজ আরও উপযুক্ত। কারণ পাওয়ার সাপ্লাই বন্ধ থাকলে ডেটা অ্যাক্সেস করা যায় না। উদ্বায়ী সঞ্চয়স্থানের জন্য অনেক খরচ হয় কারণ কম্পিউটার সিস্টেম শুধুমাত্র কয়েক MB থেকে কয়েক GB মিটমাট করতে পারে।'



C++ এ ভোলাটাইল কোয়ালিফায়ারের বৈশিষ্ট্য

C++ ভোলাটাইল কোয়ালিফায়ার মানে এখানে দেখানো হবে। যখন আমরা একটি ভেরিয়েবল ঘোষণা করি, কোয়ালিফায়ার 'অস্থির' প্রয়োগ করা হয়। এটি কম্পাইলারকে একটি অনুস্মারক হিসাবে কাজ করে যে মান যে কোনও সময় পরিবর্তিত হতে পারে। উদ্বায়ী নিচে তালিকাভুক্ত কিছু বৈশিষ্ট্যের অধিকারী।



• উদ্বায়ী কীওয়ার্ড দিয়ে মেমরি অ্যাসাইনমেন্ট পরিবর্তন করা যাবে না।



• রেজিস্টারের ভেরিয়েবল ক্যাশে করা যাবে না।

• অ্যাসাইনমেন্টের ক্ষেত্রে, মান পরিবর্তন করা যাবে না।

C++ এ ভোলাটাইল কোয়ালিফায়ারের ব্যবহার

1. যদিও আপনার কোড ভেরিয়েবলের মান পরিবর্তন করে না, তবুও এটি তা করতে পারে। ফলস্বরূপ, প্রতিবার কম্পাইলার ভেরিয়েবলের অবস্থা পরীক্ষা করে, এটি অনুমান করতে পারে না যে এটি থেকে পড়া সবচেয়ে সাম্প্রতিক মান বা সংরক্ষিত সাম্প্রতিক মানের সমান; বরং, এটিকে অবশ্যই ভেরিয়েবলের মান আরও একবার অর্জন করতে হবে।



2. কম্পাইলারকে একটি মান সংরক্ষণ করার কাজটি দূর করার প্রয়োজন নেই কারণ এটি একটি 'পার্শ্ব প্রতিক্রিয়া' যা বাইরে থেকে দেখা যায় এবং যখন একটি অস্থির ভেরিয়েবলে একটি মান সংরক্ষণ করা হয় তখন ঘটে। উদাহরণস্বরূপ, যদি দুটি মান একটি সারিতে স্থাপন করা হয়, কম্পাইলারকে অবশ্যই মানটি দুইবার রাখতে হবে।

C++ এ ভোলাটাইল কোয়ালিফায়ারের সিনট্যাক্স

# উদ্বায়ী ডেটা_টাইপ পরিবর্তনশীল_নাম

উদ্বায়ী কীওয়ার্ডটি অবশ্যই ঘোষণায় ব্যবহার করা উচিত, এবং ডাটা টাইপ ডাবল, ফ্লোট বা পূর্ণসংখ্যা সহ যেকোনো ডেটা টাইপকে বোঝায়। অবশেষে, আমরা ভেরিয়েবলের জন্য একটি নাম নির্বাচন করি। আমরা যেকোন একটি পদ্ধতি ব্যবহার করে একটি উদ্বায়ী পরিবর্তনশীলকে সংজ্ঞায়িত করতে পারি যেহেতু উভয় ঘোষণাই বৈধ।

উদাহরণ: ভোলাটাইল কোয়ালিফায়ারটি এমন বস্তু সনাক্ত করতে ব্যবহৃত হয় যা C++ এ অন্যান্য থ্রেড বা বাইরের ক্রিয়া দ্বারা সংশোধন করা যেতে পারে

যদি অবজেক্টটি একটি বাহ্যিক সংকেত বা একটি পদ্ধতি যা একটি বাধা হিসাবে কাজ করে পরিবর্তন করা হয়, তবে পরিবর্তিত মানটি RAM থেকে পুনরুদ্ধার করা প্রয়োজন কারণ ক্যাশে করা অবস্থাটি এর মধ্যে আর উপযুক্ত নয়। ফলস্বরূপ, কম্পাইলার যথাযথভাবে উদ্বায়ী বস্তুর অ্যাক্সেস পরিচালনা করে।

# অন্তর্ভুক্ত করুন
#include
# অন্তর্ভুক্ত <থ্রেড>

std ব্যবহার করে :: cout ;
std ব্যবহার করে :: endl ;
std ব্যবহার করে :: সের ;
std ব্যবহার করে :: খাওয়া ;

অস্থির int সেকেন্ড = 0 ;

অকার্যকর পাঁচ সেকেন্ড বিলম্ব ( ) {
যখন ( সেকেন্ড < 3 ) {
তুমি ঘুমাও ( 200000 ) ;
সের << 'অপেক্ষা করছি...' << endl ;
}
}

অকার্যকর ইনক্রিমেন্ট সেকেন্ড ( ) {
জন্য ( int i = 0 ; i < 5 ; ++ i ) {
ঘুম ( 1 ) ;
সের << 'বর্ধিত' << endl ;
সেকেন্ড = সেকেন্ড + 1 ;
}
}

int প্রধান ( ) {
গঠন সময়কাল শুরু { } ;
গঠন সময়কাল শেষ { } ;
std :: থ্রেড থ্রেড1 ;

থ্রেড1 = std :: থ্রেড ( ইনক্রিমেন্ট সেকেন্ড ) ;

পাঁচ সেকেন্ড বিলম্ব ( ) ;

থ্রেড1. যোগদান ( ) ;
ফিরে EXIT_SUCCESS ;
}


সম্ভাব্য দৃশ্যকল্পটি ব্যাখ্যা করার জন্য, আমরা উদ্বায়ী কীওয়ার্ড ব্যবহার করেছি যার ভেরিয়েবলটিকে সেকেন্ডস অফ ডাটা টাইপ 'int' হিসাবে ঘোষণা করা হয়েছে এবং এটিতে 0 এর মান নির্ধারণ করা হয়েছে। তারপর, আমরা দুটি ফাংশন তৈরি করি: একটি 'DelayFiveSeconds' হিসাবে যা বিশ্বব্যাপী উদ্বায়ী পূর্ণসংখ্যা ভেরিয়েবলকে পরিবর্তন করে, এবং আরেকটি 'IncrementSeconds' হিসাবে যা যখন লুপের ভিতরে একই মূল্যায়ন করে। এটি লক্ষ করা উচিত যে এই উদাহরণটি যখন সেকেন্ড 3 এর কম হওয়া উচিত তখন সেকেন্ডে লুপ করার অনুমতি দেয়।

শর্ত পূরণ হলে, তারপর while ব্লক কার্যকর করা হবে। ওয়েটিং ব্লকের ভিতরে, আমরা আনস্লিপ পদ্ধতি চালু করেছি যা 'ওয়েটিং' বিবৃতিটি প্রিন্ট করে। 'IncrementSceonds' ফাংশনে লুপ আছে। পুনরাবৃত্তির পরে, ঘুমের পদ্ধতিটি চালু করা হয়, যা 'বৃদ্ধি' বিবৃতিটি প্রিন্ট করে এবং 'সেকেন্ড' পরিবর্তনশীলকে বৃদ্ধি করে। 'ইনক্রিমেন্ট সেকেন্ড' ফাংশনের প্রাথমিক সঞ্চালন প্রধান ফাংশন দ্বারা তৈরি একটি পৃথক থ্রেড দ্বারা সম্পন্ন হয়। 'DelayFiveSeconds' পদ্ধতিটিকে প্রধান থ্রেড দ্বারা ডাকা হয়, একটি লুপ প্রবেশ করান যা শেষ হবে না যদি সেকেন্ড ভেরিয়েবলটি 5 এর মানের উপরে না যায়।

যত তাড়াতাড়ি মূল থ্রেড সেকেন্ড ভেরিয়েবলের মান পরিবর্তিত হয়েছে তা লক্ষ্য করে, এটি পদ্ধতি থেকে ফিরে আসবে কারণ অন্য একটি থ্রেড ইতিমধ্যে এটিকে একই সাথে বৃদ্ধি করতে শুরু করেছে।

C++ এ থ্রেড কোড চালানোর জন্য, আমাদের 'g++ -pthread –o filename filename.cc' কমান্ডটি ব্যবহার করা উচিত। আপনি যদি কমান্ডে '-pthread' স্থাপন না করেন, তাহলে কম্পাইলার দ্বারা নিক্ষিপ্ত একটি ব্যতিক্রম হওয়ার সম্ভাবনা রয়েছে। ফলস্বরূপ, আমরা কার্যকরভাবে একটি শর্তসাপেক্ষ অপেক্ষা ফাংশন তৈরি করেছি যা একটি বাইরের শক্তি দ্বারা উদ্বায়ী বস্তুর পরিবর্তন না হওয়া পর্যন্ত অপেক্ষা করে। এটা মনে রাখা গুরুত্বপূর্ণ যে আপডেট কোড ব্লক একটি ভিন্ন অনুবাদ বিভাগ বা বাহ্যিক সংকেত ক্রিয়া থেকে আসতে পারে, যদিও এই কোডটি এখনও একই কাজ করবে যদি উদ্বায়ী কোয়ালিফায়ার সরানো হয় এবং একটি প্রচলিত গ্লোবাল ভেরিয়েবল ব্যবহার করা হয়।

উপসংহার

এখানে, আমরা C++-এ ভোলাটাইল-এর একটি ওভারভিউ দিয়ে সিনট্যাক্স, ব্যবহার এবং আরও ভালোভাবে বোঝার জন্য উপযুক্ত উদাহরণের সাথে আলোচনা করি। যেহেতু কম্পাইলার মান ভবিষ্যদ্বাণী করতে পারে না, তাই সি প্রোগ্রামিং-এ উদ্বায়ী অত্যন্ত গুরুত্বপূর্ণ। অস্থির ব্যবহার করার প্রাথমিক সুবিধা হল যে যখনই কোনও ব্যবহারকারী এটিকে সংশোধন করার অনুরোধ করেন বা একই ভেরিয়েবল ব্যবহার করে অন্য কোনও থ্রেড সক্রিয় থাকে তখন এর মান পরিবর্তিত হতে পারে।