সি / সি ++ এ, বিশ্বব্যাপী ভেরিয়েবলগুলি কি এতটা খারাপ যেটি আমার অধ্যাপক ভাবেন সেগুলি হিসাবে?
সি / সি ++ এ, বিশ্বব্যাপী ভেরিয়েবলগুলি কি এতটা খারাপ যেটি আমার অধ্যাপক ভাবেন সেগুলি হিসাবে?
উত্তর:
গ্লোবাল ভেরিয়েবলগুলির সমস্যাটি হ'ল যেহেতু প্রতিটি ফাংশনের এগুলিতে অ্যাক্সেস রয়েছে তাই এই ফাংশনগুলি আসলে কোন ফাংশনগুলি পড়ে এবং লিখতে পারে তা নির্ধারণ করা আরও ক্রমশ শক্ত হয়ে ওঠে।
অ্যাপ্লিকেশনটি কীভাবে কাজ করে তা বোঝার জন্য, আপনাকে বিশ্বব্যাপী রাষ্ট্রের পরিবর্তনকারী প্রতিটি ফাংশন বিবেচনা করতে হবে। এটি করা যেতে পারে, তবে অ্যাপ্লিকেশনটি বাড়ার সাথে সাথে এটি কার্যত অসম্ভব হওয়ার পক্ষে (অথবা কমপক্ষে একটি সম্পূর্ণ সময় নষ্ট করা) শক্ত হয়ে উঠবে।
আপনি যদি গ্লোবাল ভেরিয়েবলের উপর নির্ভর না করেন, আপনি বিভিন্ন ফাংশনগুলির মধ্যে প্রয়োজন হিসাবে রাষ্ট্রের পাশ দিয়ে যেতে পারেন। এইভাবে আপনি প্রতিটি ফাংশন কী করে তা বোঝার আরও অনেক ভাল সুযোগ দাঁড়িয়েছেন, কারণ আপনাকে বৈশ্বিক রাষ্ট্রকে বিবেচনায় নেওয়ার দরকার নেই।
গুরুত্বপূর্ণ বিষয়টি সামগ্রিক লক্ষ্যটি স্মরণ করা: স্পষ্টতা
"কোনও বৈশ্বিক ভেরিয়েবল" নিয়মটি নেই কারণ বেশিরভাগ সময়, বিশ্বব্যাপী ভেরিয়েবল কোডের অর্থ কম পরিষ্কার করে দেয়।
যাইহোক, অনেক বিধিগুলির মতো, লোকেরা বিধিটি মনে রাখে, এবং নিয়মটি কী করতে চায় তা নয়।
আমি এমন প্রোগ্রাম দেখেছি যেগুলি বিশ্বব্যাপী ভেরিয়েবলগুলির দুষ্টতা এড়াতে কেবল চারপাশে প্রচুর পরিমাণে প্যারামিটারগুলি পেরিয়ে কোডের আকার দ্বিগুণ বলে মনে হয়। শেষ অবধি, গ্লোবালগুলি ব্যবহার করে প্রোগ্রামটি এটি পড়ার পক্ষে আরও পরিষ্কার হয়ে উঠত । নির্বিকারভাবে নিয়মের শব্দটি মেনে চলার মাধ্যমে মূল প্রোগ্রামার নিয়মের অভিপ্রায় ব্যর্থ করেছিল।
সুতরাং, হ্যাঁ, গ্লোবালগুলি প্রায়শই খারাপ। তবে যদি আপনি মনে করেন যে শেষ পর্যন্ত, প্রোগ্রামারটির অভিপ্রায়টি বিশ্বব্যাপী ভেরিয়েবল ব্যবহারের মাধ্যমে আরও পরিষ্কার হয়ে যায়, তবে এগিয়ে যান। তবে, স্পষ্টতার ড্রপটি মনে রাখুন যা স্বয়ংক্রিয়ভাবে নিশ্চিত হয় যখন আপনি কাউকে প্রথম টুকরা কীভাবে কাজ করে তা বুঝতে দ্বিতীয় সেকেন্ডের কোড (গ্লোবালগুলি) অ্যাক্সেস করতে বাধ্য করেন।
আমার অধ্যাপক এরকম কিছু বলতেন: গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা ঠিক আছে যদি আপনি সেগুলি সঠিকভাবে ব্যবহার করেন। আমি মনে করি না যে এগুলি সঠিকভাবে ব্যবহার করে আমি কখনই ভাল হয়েছি, তাই আমি এগুলি খুব কমই ব্যবহার করেছি।
static
বিশ্বব্যাপী ভেরিয়েবলগুলি প্রচুর ব্যবহার করে , ভাষা সি হয় তুলনামূলকভাবে ছোট অনুবাদ ইউনিটে সীমাবদ্ধ থাকায় তারা সি ++ অবজেক্টের শ্রেণি ভেরিয়েবলের সাদৃশ্য শুরু করে।
program lifetime, file scope variables
,। আপনি বাইরের পৃথিবীতে ভেরিয়েবলের জন্য একটি পয়েন্টার পাস করার পরে এটি বেশ গ্লোবাল হয়ে যায় (যা স্বয়ংক্রিয় ভেরিয়েবলগুলি দিয়ে অসম্ভব) ..
static
গ্লোবাল ভেরিয়েবলগুলির একই অনুবাদ ইউনিটে সীমিত সুযোগ রয়েছে। তবে প্রোগ্রামের শেষ অবধি তাদের বিশ্বব্যাপী পরিবর্তনশীল হিসাবে আজীবন সময় রয়েছে।
গ্লোবাল ভেরিয়েবলগুলি কেবল তখনই ব্যবহার করা উচিত যখন আপনার কোনও বিকল্প নেই। এবং হ্যাঁ, এর মধ্যে রয়েছে সিলেটলেটস। 90% সময়, বিশ্বব্যাপী ভেরিয়েবলগুলি একটি পরামিতি কাছাকাছি যাওয়ার খরচ বাঁচাতে প্রবর্তিত হয়। এবং তারপরে মাল্টিথ্রেডিং / ইউনিট টেস্টিং / রক্ষণাবেক্ষণ কোডিং ঘটে এবং আপনার সমস্যা আছে।
হ্যাঁ, 90% পরিস্থিতিতে গ্লোবাল ভেরিয়েবলগুলি খারাপ। ব্যতিক্রমগুলি আপনার কলেজের বছরগুলিতে আপনি সম্ভবত দেখেন না। আমার মাথার উপরের অংশটি ভাবতে পারে এমন একটি ব্যতিক্রম হ'ল বিঘ্নিত টেবিলের মতো সহজাত গ্লোবাল অবজেক্টগুলির সাথে কাজ করে। ডিবি সংযোগের মতো জিনিসগুলি বিশ্বব্যাপী বলে মনে হচ্ছে তবে তা নয়।
গ্লোবাল ভেরিয়েবল প্রোগ্রামারটির জন্য যে সমস্যাটি তৈরি করে তা হ'ল এটি আন্ত-উপাদান সংযুক্তিকে প্রসারিত করে বৈশ্বিক ভেরিয়েবলগুলি ব্যবহার করে এমন বিভিন্ন উপাদানগুলির মধ্যে পৃষ্ঠকে । এর অর্থ হ'ল বৈশ্বিক পরিবর্তনশীল ব্যবহারের উপাদানগুলির সংখ্যা বাড়ার সাথে সাথে মিথস্ক্রিয়াগুলির জটিলতাও বাড়তে পারে। এই বর্ধিত সংযোগটি সাধারণত পরিবর্তনগুলি করার সময় সিস্টেমে ইনজেক্ট করা ত্রুটিগুলি আরও সহজ করে তোলে এবং ত্রুটিগুলি নির্ণয় এবং সংশোধনকে আরও শক্ত করে তোলে। এই বৃদ্ধি সংযোজন পরিবর্তনগুলি করার সময় উপলভ্য বিকল্পগুলির সংখ্যাও হ্রাস করতে পারে এবং পরিবর্তনের ফলাফলগুলি নির্ধারণের জন্য বৈশ্বিক পরিবর্তনশীল ব্যবহার করার জন্য বিভিন্ন মডিউলগুলির মাধ্যমে প্রায়শই একজনকে অবশ্যই সনাক্ত করতে হবে।
মূলত গ্লোবাল ভেরিয়েবল ব্যবহারের বিপরীত এনক্যাপসুলেশনটির উদ্দেশ্য হ'ল উত্সটি সহজতর ও নিরাপদ এবং আরও সহজে পরীক্ষিত করার জন্য সংযোজন হ্রাস করা। ইউনিট টেস্টিং ব্যবহার করা অনেক সহজযখন বৈশ্বিক ভেরিয়েবল ব্যবহার করা হয় না তখন ।
উদাহরণস্বরূপ, যদি আপনার কাছে একটি সাধারণ গ্লোবাল পূর্ণসংখ্য পরিবর্তনশীল থাকে যা একটি গণিত সূচক হিসাবে ব্যবহৃত হয় যা বিভিন্ন উপাদানগুলি একটি রাজ্য মেশিন হিসাবে ব্যবহার করে এবং আপনি একটি নতুন উপাদান যুক্ত করে একটি নতুন রাষ্ট্র যুক্ত করে পরিবর্তন করেন তবে আপনাকে অবশ্যই অন্য সমস্তটি দিয়ে চিহ্নিত করতে হবে পরিবর্তনগুলি তাদের প্রভাবিত করবে না তা নিশ্চিত করার জন্য উপাদানগুলি। সম্ভাব্য সমস্যার উদাহরণ হ'ল যদি বর্তমানের প্রতিটি মানগুলির বিবৃতি switch
সহ গণনা বৈশ্বিক পরিবর্তনশীলের মান পরীক্ষা করার জন্য একটি বিবৃতি case
বিভিন্ন স্থানে ব্যবহার করা হয় এবং এমনটি ঘটে যে কিছু switch
বিবৃতি default
হ্যান্ডেল করার ক্ষেত্রে মামলা না করে থাকে happens হঠাৎ করেই বিশ্বব্যাপী আপনার অপ্রত্যাশিত আচরণের জন্য অপ্রত্যাশিত মানটি অ্যাপ্লিকেশনটি সম্পর্কিত is
অন্যদিকে একটি ভাগ করা ডেটা অঞ্চল ব্যবহার করে বিশ্বব্যাপী প্যারামিটারগুলির একটি সেট থাকতে পারে যা অ্যাপ্লিকেশন জুড়ে রেফারেন্স করা হয়। এই পদ্ধতির প্রায়শই ছোট মেমরির পদচিহ্নগুলি সহ এম্বেড করা অ্যাপ্লিকেশনগুলির সাথে ব্যবহৃত হয়।
এই ধরণের অ্যাপ্লিকেশনগুলিতে গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করার সময় সাধারণত ডেটা অঞ্চলে লেখার জন্য দায়বদ্ধতা একক উপাদানকে বরাদ্দ করা হয় এবং অন্যান্য সমস্ত উপাদানগুলি অঞ্চলটি দেখে const
এবং এটি থেকে পড়া হয়, কখনই এটি লেখা হয় না। এই পদ্ধতির গ্রহণ করা বিকাশ করতে পারে এমন সমস্যাগুলিকে সীমাবদ্ধ করে।
বিশ্বব্যাপী ভেরিয়েবলগুলি থেকে কয়েকটি সমস্যা যার চারপাশে কাজ করা দরকার
যখন কোনও গ্লোবাল ভেরিয়েবলের যেমন একটি স্ট্রাকের উত্সটি সংশোধন করা হয়, তখন এটি ব্যবহার করা সমস্ত কিছু অবশ্যই পুনরায় সংযুক্ত করতে হবে যাতে ভেরিয়েবলটি ব্যবহার করে যা কিছু তার প্রকৃত আকার এবং মেমরির টেম্পলেট জানে।
যদি একাধিক উপাদান গ্লোবাল ভেরিয়েবলটি সংশোধন করতে পারে তবে আপনি বৈশ্বিক ভেরিয়েবলের সাথে অসংগতিযুক্ত ডেটা থাকাতে সমস্যা হতে চলেছেন। একটি বহু-থ্রেডিং অ্যাপ্লিকেশন সহ, আপনাকে সম্ভবত কোনও উপায় সরবরাহের জন্য কোনও ধরণের লকিং বা সমালোচনামূলক অঞ্চল যুক্ত করতে হবে যাতে এক সময় কেবলমাত্র একটি থ্রেড বৈশ্বিক চলক পরিবর্তন করতে পারে এবং যখন একটি থ্রেড চলকটি পরিবর্তন করে, সমস্ত পরিবর্তন সম্পূর্ণ হয় এবং অন্যান্য থ্রেডগুলি ভেরিয়েবলটি জিজ্ঞাসা করতে বা এটি সংশোধন করার আগে প্রতিশ্রুতিবদ্ধ।
বিশ্বব্যাপী চলক ব্যবহার করে এমন একাধিক-থ্রেড অ্যাপ্লিকেশন ডিবাগ করা আরও কঠিন হতে পারে। আপনি জাতি অবস্থাতে দৌড়াতে পারেন পারেন যা ত্রুটিগুলি তৈরি করতে পারে যা প্রতিলিপি করা কঠিন difficult বেশ কয়েকটি উপাদান একটি বিশ্বব্যাপী ভেরিয়েবলের মাধ্যমে যোগাযোগ করে, বিশেষত একটি বহু-থ্রেড অ্যাপ্লিকেশনটিতে, কখন এবং কীভাবে পরিবর্তনশীলটি পরিবর্তনশীল তা কোন উপাদানটি পরিবর্তনশীল পরিবর্তন করছে তা বুঝতে সক্ষম হওয়া খুব কঠিন হতে পারে।
নাম সংঘাত বিশ্বব্যাপী ভেরিয়েবল ব্যবহার করে সমস্যা হতে পারে। গ্লোবাল ভেরিয়েবলের একই নাম থাকা একটি স্থানীয় ভেরিয়েবল গ্লোবাল ভেরিয়েবলকে আড়াল করতে পারে। সি প্রোগ্রামিং ভাষা ব্যবহার করার সময় আপনি নামকরণের কনভেনশন ইস্যুতেও চলে যান। চারপাশের কাজটি হ'ল সিস্টেমটিকে উপ-সিস্টেমে একটি নির্দিষ্ট উপ-সিস্টেমের জন্য একই প্রথম তিনটি বর্ণ দিয়ে শুরু করে উপ-সিস্টেমে বিভক্ত করা ( উদ্দেশ্য সিতে নামের স্থান সংঘর্ষের সমাধানের জন্য এটি দেখুন )। সি ++ নাম স্পেস সরবরাহ করে এবং সি দিয়ে আপনি বিশ্বব্যাপী দৃশ্যমান কাঠামো তৈরি করে এর চারপাশে কাজ করতে পারবেন যার সদস্যরা বিভিন্ন ডেটা আইটেম এবং ডেটা এবং ফাংশনগুলিকে নির্দেশ করে যা কোনও ফাইলকে স্ট্যাটিক হিসাবে সরবরাহ করা হয় তাই কেবলমাত্র ফাইলের দৃশ্যমানতার সাথে কেবল সেগুলি উল্লেখ করা যেতে পারে বিশ্বব্যাপী দৃশ্যমান কাঠামো।
কিছু ক্ষেত্রে আসল অ্যাপ্লিকেশন উদ্দেশ্যটি পরিবর্তিত হয় যাতে একক থ্রেডের জন্য রাজ্যকে সরবরাহ করে এমন বিশ্বব্যাপী পরিবর্তনগুলি বিভিন্ন ডুপ্লিকেট থ্রেড চালানোর অনুমতি দেওয়ার জন্য সংশোধিত হয়। উদাহরণ হ'ল একক ব্যবহারকারীর জন্য রাষ্ট্রের জন্য বৈশ্বিক ভেরিয়েবলগুলি ব্যবহার করে ডিজাইন করা সহজ অ্যাপ্লিকেশন এবং তারপরে রিমোট অ্যাপ্লিকেশনগুলিকে ভার্চুয়াল ব্যবহারকারী হিসাবে কাজ করার অনুমতি দেওয়ার জন্য একটি REST ইন্টারফেস যুক্ত করার জন্য একটি অনুরোধ ব্যবস্থা থেকে আসে । সুতরাং এখন আপনি গ্লোবাল ভেরিয়েবলগুলি এবং তাদের রাষ্ট্রীয় তথ্য নকল করতে চলেছেন যাতে একক ব্যবহারকারী পাশাপাশি দূরবর্তী অ্যাপ্লিকেশনগুলির প্রতিটি ভার্চুয়াল ব্যবহারকারীদের নিজস্ব, গ্লোবাল ভেরিয়েবলগুলির অনন্য সেট থাকে।
সি ++ namespace
এবং struct
সিটির জন্য প্রযুক্তি ব্যবহার করা
সি ++ প্রোগ্রামিং ভাষার জন্য namespace
নির্দেশ একটি নাম সংঘর্ষের সম্ভাবনা কমাতে একটি বিশাল সহায়তা। namespace
পাশাপাশি class
এবং বিভিন্ন অ্যাক্সেস কীওয়ার্ডগুলি ( private
, protected
এবং public
) আপনাকে ভেরিয়েবলগুলি encapsulate করতে প্রয়োজনীয় বেশিরভাগ সরঞ্জাম সরবরাহ করে provide তবে সি প্রোগ্রামিং ভাষা এই নির্দেশনা সরবরাহ করে না provide এই স্ট্যাকওভারফ্লো পোস্টিং, সি-তে নেমস্পেসগুলি সি এর জন্য কিছু কৌশল সরবরাহ করে
একটি দরকারী কৌশলটি হ'ল একক মেমরি রেসিডেন্ট ডেটা অঞ্চল struct
যা একটি বিশ্বব্যাপী দৃশ্যমানতা হিসাবে সংজ্ঞায়িত করা হয় এবং এর মধ্যে struct
বিভিন্ন বৈশ্বিক চলক এবং ক্রিয়াকলাপগুলি প্রকাশিত হয় যা পয়েন্টার হয়। গ্লোবাল ভেরিয়েবলের আসল সংজ্ঞাগুলি static
কীওয়ার্ড ব্যবহার করে ফাইল স্কোপ দেওয়া হয় । আপনি যদি const
কেবল কী পাঠ্য তা বোঝাতে কীওয়ার্ডটি ব্যবহার করেন তবে সংকলক আপনাকে কেবল পঠনযোগ্য অ্যাক্সেস প্রয়োগ করতে সহায়তা করতে পারে।
struct
কৌশলটি ব্যবহার করে গ্লোবালকেও সংযোজন করতে পারে যাতে এটি একধরণের প্যাকেজ বা উপাদান হয়ে যায় যা বিশ্বব্যাপী হতে পারে। এই ধরণের একটি উপাদান থাকার ফলে বিশ্বব্যাপী এবং কার্যকারিতা বিশ্বব্যাপী প্রভাবিত করে এমন পরিবর্তনগুলি পরিচালনা করা সহজ হয়।
যাইহোক namespace
বা struct
কৌশলটি নাম সংঘর্ষ পরিচালনা করতে সহায়তা করতে পারে তবে গ্লোবালগুলির ব্যবহার বিশেষত একটি আধুনিক বহু-থ্রেডযুক্ত অ্যাপ্লিকেশনটিতে গ্লোবালগুলি ব্যবহার করে যা আন্তঃ উপাদান উপাদান সংযোগের অন্তর্নিহিত সমস্যাগুলি এখনও বিদ্যমান।
হ্যাঁ, তবে আপনি গ্লোবাল ভেরিয়েবল ব্যবহার করে এমন কোডে কাজ করা বন্ধ না করা এবং গ্লোবাল ভেরিয়েবল ব্যবহার করে এমন কোড ব্যবহার করে এমন অন্য কিছু লেখা শুরু না করা পর্যন্ত আপনি গ্লোবাল ভেরিয়েবলের ব্যয় বহন করবেন না। কিন্তু ব্যয় এখনও আছে।
অন্য কথায়, এটি একটি দীর্ঘমেয়াদী পরোক্ষ খরচ এবং যেমন বেশিরভাগ লোকেরা মনে করেন এটি খারাপ নয়।
যদি সম্ভব হয় যে আপনার কোড সুপ্রিম কোর্টের বিচার চলাকালীন নিবিড় পর্যালোচনাতে শেষ হবে , তবে আপনি বিশ্বব্যাপী পরিবর্তনগুলি এড়াতে নিশ্চিত করতে চান।
এই নিবন্ধটি দেখুন: বগি ব্রেথলাইজার কোড উত্স পর্যালোচনার গুরুত্ব প্রতিফলিত করে
কোডের স্টাইলে কিছু সমস্যা ছিল যা উভয় অধ্যয়ন দ্বারা চিহ্নিত করা হয়েছিল। পর্যালোচকদের উদ্বেগজনক এমন একটি স্টাইলিস্টিক বিষয় হ'ল সুরক্ষিত গ্লোবাল ভেরিয়েবলের বিস্তৃত ব্যবহার । এটি দুর্বল ফর্ম হিসাবে বিবেচনা করা হয় কারণ এটি ঝুঁকি বাড়ায় যে প্রোগ্রামের অবস্থাটি বেমানান হয়ে যাবে বা সেই মানগুলি অজ্ঞাতসারে সংশোধিত বা ওভাররাইট হবে। গবেষকরা এই ব্যপারে কিছুটা উদ্বেগও প্রকাশ করেছিলেন যে দশমিক নির্ভুলতা পুরো কোড জুড়ে ধারাবাহিকভাবে বজায় থাকে না।
ম্যান, আমি বাজি ধরছি যে এই বিকাশকারীরা কামনা করছে যে তারা বিশ্বব্যাপী ভেরিয়েবল ব্যবহার না করে!
গ্লোবাল ভেরিয়েবলগুলি আপনার বানানোর মতো খারাপ, কম নয়।
আপনি যদি একটি সম্পূর্ণ এনক্যাপসুলেটেড প্রোগ্রাম তৈরি করে থাকেন তবে আপনি গ্লোবালগুলি ব্যবহার করতে পারেন। গ্লোবালগুলি ব্যবহার করা এটি একটি "পাপ", তবে প্রোগ্রামিং পাপগুলি লার্জিকভাবে দার্শনিক।
আপনি যদি L.in.oleum পরীক্ষা করে দেখেন তবে আপনি এমন একটি ভাষা দেখতে পাবেন যার ভেরিয়েবলগুলি সম্পূর্ণ বিশ্বব্যাপী। এটি অপ্রকাশনীয় কারণ গ্রন্থাগারগুলির সকলের কাছে গ্লোবাল ব্যবহার ছাড়া কোনও বিকল্প নেই।
এটি বলেছে, যদি আপনার পছন্দ থাকে এবং আপনি প্রোগ্রামার দর্শনের বিষয়টি উপেক্ষা করতে পারেন তবে গ্লোবালগুলি এত খারাপ নয়।
আপনি যদি এগুলি সঠিকভাবে ব্যবহার করেন তবে উভয়ই গোটোস নয়।
সবচেয়ে বড় "খারাপ" সমস্যাটি হ'ল, আপনি যদি এগুলি ভুল ব্যবহার করেন, লোকেরা চিৎকার করে, মার্স ল্যান্ডার ক্র্যাশ করে, এবং বিশ্ব উড়িয়ে দেয় .... বা এরকম কিছু।
আমি এই প্রশ্নের উত্তর অন্য প্রশ্নের সাথে দিয়ে দেব: আপনি কি সিজেল্টনগুলি ব্যবহার করেন / সাইনজেল্টনগুলি খারাপ?
কারণ (প্রায় সবগুলি) সিগেলটন ব্যবহার একটি গৌরবময় বৈশ্বিক পরিবর্তনশীল।
সমস্যাটি কম যে এগুলি খারাপ এবং আরও বিপজ্জনক । তাদের নিজস্ব উপকারিতা এবং কনসগুলির সেট রয়েছে এবং এমন পরিস্থিতি রয়েছে যেখানে তারা কোনও নির্দিষ্ট কাজ অর্জনের জন্য সবচেয়ে দক্ষ বা একমাত্র উপায়। তবে আপনি সর্বদা সঠিকভাবে ব্যবহারের পদক্ষেপ নিলেও এগুলি অপব্যবহার করা খুব সহজ।
কয়েকটি সুবিধা:
কয়েকটি কনস:
দ্রষ্টব্য, আপনি যদি করেন তবে, প্রথম তালিকা এবং প্রথম দুটি কনস আমি তালিকাভুক্ত হ'ল ঠিক একই জিনিস, কেবলমাত্র বিভিন্ন শব্দের সাথে। এটি কারণ বৈশ্বিক পরিবর্তনশীলগুলির বৈশিষ্ট্যগুলি সত্যই কার্যকর হতে পারে তবে খুব কার্যকর যেগুলি তাদের কার্যকর করে তোলে সেগুলি তাদের সমস্ত সমস্যার উত্স।
কয়েকটি সমস্যার কয়েকটি সম্ভাব্য সমাধান:
Globals
বা GlobalVars
), অথবা বিশ্বব্যাপী ভেরিয়েবলের জন্য একটি প্রমিত নামকরণ কনভেনশন ব্যবহার করুন (যেমন global_[name]
বা g_module_varNameStyle
(যেমন মন্তব্যগুলিতে আন্ডারস্কোর_ডি দ্বারা উল্লিখিত হিসাবে) ))। এটি উভয়ই তাদের ব্যবহারের ডকুমেন্ট দেবে (আপনি এমন নেমস্পেস / স্ট্রাক্ট নাম সন্ধানের মাধ্যমে বৈশ্বিক ভেরিয়েবল ব্যবহার করে এমন কোড খুঁজে পেতে পারেন) এবং বিশ্বব্যাপী নেমস্পেসে প্রভাব হ্রাস করুন।extern
এটিকে সম্পর্কিত শিরোনামে ঘোষণা করুন , যাতে তাদের ব্যবহার সংকলন ইউনিটে সীমাবদ্ধ করা যায় যা তাদের অ্যাক্সেস করতে হবে। যদি আপনার কোডটি প্রচুর গ্লোবাল ভেরিয়েবলের উপর নির্ভর করে তবে প্রতিটি সংকলন ইউনিট কেবলমাত্র তাদের মধ্যে কয়েকটি মুখ্য অ্যাক্সেসের প্রয়োজন, আপনি তাদের একাধিক উত্স ফাইলগুলিতে বাছাই করতে বিবেচনা করতে পারেন, সুতরাং প্রতিটি ফাইলের অ্যাক্সেসকে বৈশ্বিক ভেরিয়েবলের মধ্যে সীমাবদ্ধ করা সহজ।তারা ভাল বা খারাপ সেগুলি আপনি কীভাবে ব্যবহার করেন তার উপর নির্ভর করে। বেশিরভাগেরই এগুলি খারাপভাবে ব্যবহার করার প্রবণতা রয়েছে, তাই তাদের প্রতি সাধারণ সতর্কতা রয়েছে। যদি সঠিকভাবে ব্যবহার করা হয় তবে এগুলি একটি বড় वरदान হতে পারে; যদি দুর্বল ব্যবহৃত, যাইহোক, তারা পারে এবং হবে ফিরে আসা আপনি দান্ত দিয়া ফুটা করা কখন এবং কিভাবে আপনি অন্তত এটা আশা।
এটি দেখার একটি ভাল উপায় হ'ল এগুলি নিজেরাই খারাপ নয়, তবে তারা খারাপ নকশা সক্ষম করে এবং খারাপ ডিজাইনের প্রভাবগুলি তাত্পর্যপূর্ণভাবে গুন করতে পারে।
এমনকি যদি আপনি এগুলি ব্যবহারের ইচ্ছা নাও করেন তবে নিরাপদে কীভাবে সেগুলি ব্যবহার করবেন এবং কীভাবে নিরাপদে ব্যবহার করবেন তা আপনি জানেন না সেগুলি ব্যবহার না করাই কীভাবে নিরাপদে ব্যবহার করবেন এবং তা না বেছে নেওয়াই ভাল। আপনি যদি এমন কোনও পরিস্থিতিতে নিজেকে খুঁজে পান যেখানে আপনাকে বৈশ্বিক ভেরিয়েবলের উপর নির্ভর করে এমন প্রাক-বিদ্যমান কোড বজায় রাখা দরকার, আপনি কীভাবে সেগুলি সঠিকভাবে ব্যবহার করতে না জানেন তা আপনি অসুবিধায় পড়তে পারেন।
g_module_varNameStyle
পুরোপুরি সুস্পষ্ট দেখতে পাই । স্পষ্টতই, আমি যদি এটিকে সহজেই এড়াতে পারি তবে আমি গ্লোবালগুলি ব্যবহার করছি না - মূল শব্দটি সহজেই , কারণ যেহেতু আমি বিশ্বাস করা বন্ধ করে দিয়েছি যে এগুলি অবশ্যই এড়ানো উচিত - বা বরং নিঃসৃত - যে কোনও মূল্যে, আমার অনেক বেশি ভাল সময় হচ্ছে, এবং আমার কোডটি (শক!) আরও পরিপাটি
যেহেতু অন্য একটি থ্রেডে কেউ বলেছে (আমি প্যারাফ্রেসিং করছি) "এরূপ বিধিগুলি ভাঙা উচিত নয়, যতক্ষণ না আপনি এগুলি করার ফলাফলগুলি সম্পূর্ণরূপে বুঝতে পারেন।"
এমন সময় রয়েছে যখন গ্লোবাল ভেরিয়েবলগুলি প্রয়োজনীয়, বা কমপক্ষে খুব সহায়ক (উদাহরণস্বরূপ সিস্টেমের সংজ্ঞায়িত কল-ব্যাকগুলির সাথে কাজ করা)। অন্যদিকে, আপনাকে বলা সমস্ত কারণেই এগুলি খুব বিপজ্জনক।
প্রোগ্রামিংয়ের অনেকগুলি দিক রয়েছে যা সম্ভবত বিশেষজ্ঞদের উপর ছেড়ে দেওয়া উচিত। কখনও কখনও আপনি একটি খুব ধারালো ছুরি প্রয়োজন। আপনি প্রস্তুত না হওয়া পর্যন্ত আপনি এটি ব্যবহার করতে পারবেন না ...
গ্লোবাল ভেরিয়েবলগুলি সাধারণত খারাপ হয়, বিশেষত যদি অন্যান্য লোকেরা একই কোডে কাজ করে এবং ভেরিয়েবলটি রেফারেন্সযুক্ত সমস্ত জায়গাগুলি অনুসন্ধান করতে 20 মিনিট ব্যয় করতে চান না। এবং থ্রেড যুক্ত করা যা ভেরিয়েবলগুলি সংশোধন করে পুরো মাথা ব্যাথার নতুন স্তরে নিয়ে আসে।
একক অনুবাদ ইউনিটে ব্যবহৃত অজ্ঞাতনামে গ্লোবাল ধ্রুবকগুলি পেশাদার অ্যাপ্লিকেশন এবং গ্রন্থাগারগুলিতে সূক্ষ্ম এবং সর্বব্যাপী। তবে যদি ডেটাটি পরিবর্তনযোগ্য হয়, এবং / অথবা এটি একাধিক টিইউর মধ্যে ভাগ করে নিতে হয়, আপনি এটি সজ্জিত করতে চাইতে পারেন - যদি ডিজাইনের পক্ষে না হয় তবে কারও পক্ষে আপনার কোডটি ডিবাগ করার জন্য বা তার সাথে কাজ করার জন্য।
গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা এক ধরণের রাগের নিচে ময়লা পরিষ্কার করার মতো। এটি দ্রুত সমাধান, এবং এটি পরিষ্কার করার জন্য ধূলিকণা বা ভ্যাকুয়াম পাওয়ার চেয়ে স্বল্প মেয়াদে অনেক সহজ। যাইহোক, আপনি যদি কখনও কখনও রাগটি সরিয়ে শেষ করেন তবে আপনার নীচে একটি বিস্ময়কর গোলমাল হবে।
আমি মনে করি আপনার অধ্যাপক কোনও খারাপ অভ্যাস শুরু হওয়ার আগেই এটি বন্ধ করার চেষ্টা করছেন।
গ্লোবাল ভেরিয়েবলগুলির তাদের জায়গা রয়েছে এবং অনেকের মতোই তারা কোথায় এবং কখন ব্যবহার করবেন তা জেনে জটিল হতে পারে বলে জানিয়েছেন। সুতরাং আমি কেন, কীভাবে, কখন এবং কোথায় বিশ্বব্যাপী ভেরিয়েবলের আপনার প্রফেসর কেবল নিষিদ্ধ করার সিদ্ধান্ত নিয়েছেন তার কৌতুকপূর্ণ কৌতূহলে প্রবেশ করার পরিবর্তে আমি মনে করি। কে জানে, ভবিষ্যতে তিনি তাদের নিষিদ্ধ করতে পারেন।
একেবারে না. তাদের অপব্যবহার করছি যদিও ... এটি খারাপ।
নির্বোধের জন্য তাদের এগুলি অপসারণ করা কেবল ... মূর্খতাবিহীন। অগ্রণীতা এবং অসুবিধাগুলি আপনি যদি না জানেন তবে ভালভাবে চালানো ভাল এবং আপনি যেমন শিখিয়েছেন / শিখেছেন সেভাবে করা ভাল, তবে বৈশ্বিক ভেরিয়েবলগুলির সাথে স্পষ্টতই কোনও ভুল নেই। আপনি যখন ভাল মতামতগুলি বুঝতে পারবেন তখন নিজের নিজের সিদ্ধান্ত নিন।
গ্লোবাল ভেরিয়েবলগুলি ছোট প্রোগ্রামগুলিতে সূক্ষ্ম তবে বড় আকারে যদি একইভাবে ব্যবহার করা হয় তবে ভয়াবহ।
এর অর্থ আপনি শেখার সময় এগুলি ব্যবহারের অভ্যাসটি সহজেই পেতে পারেন। আপনার অধ্যাপক এটি থেকে আপনাকে রক্ষা করার চেষ্টা করছেন।
আপনি যখন আরও অভিজ্ঞ হন তখন তারা যখন ঠিক থাকে তখন শিখতে আরও সহজ হবে।
না তারা মোটেও খারাপ নয়। এই সংকল্পটি তৈরি করতে আপনাকে সংকলক দ্বারা উত্পাদিত (মেশিন) কোডটি দেখতে হবে, কখনও কখনও গ্লোবালের চেয়ে স্থানীয় ব্যবহার করা আরও খারাপ। এছাড়াও মনে রাখবেন যে স্থানীয় স্থিতিশীল উপর "স্থিতিশীল" লাগানো মূলত এটিকে বৈশ্বিক করে তোলে (এবং অন্যান্য কুৎসিত সমস্যা তৈরি করে যা প্রকৃত বিশ্বব্যাপী সমাধান করবে)। "স্থানীয় গ্লোবাল" বিশেষত খারাপ।
গ্লোবালগুলি আপনার মেমরির ব্যবহারের উপরেও পরিষ্কার নিয়ন্ত্রণ দেয় যা স্থানীয়দের সাথে করা আরও কঠিন। এই দিনগুলিতে কেবল এমবেড করা পরিবেশে গুরুত্বপূর্ণ যেখানে স্মৃতিশক্তি যথেষ্ট সীমাবদ্ধ। এম্বেড করা অন্যান্য পরিবেশের মতোই এবং ধরে নেওয়ার আগে প্রোগ্রামিংয়ের নিয়মগুলি বোর্ড জুড়ে একই বলে ধরে নেওয়ার আগে আপনাকে জানার মতো কিছু।
আপনি যে নিয়ম শেখানো হচ্ছে তা নিয়ে প্রশ্ন তোলা ভাল, তাদের বেশিরভাগই আপনাকে যে কারণে বলা হচ্ছে তা নয়। যদিও সর্বাধিক গুরুত্বপূর্ণ শিক্ষাটি এই নয় যে এটি চিরকাল আপনার সাথে বহন করার নিয়ম, তবে এই শ্রেণিটি পাস করার জন্য এবং এগিয়ে যাওয়ার জন্য এটি একটি নিয়মকে সম্মান করার প্রয়োজন। জীবনে আপনি দেখতে পাবেন যে এক্সওয়াইজেড সংস্থার জন্য আপনার কাছে অন্যান্য প্রোগ্রামিং বিধি রয়েছে যা আপনাকে শেষ পর্যন্ত সম্মতি দিতে হবে যাতে বেতনের চেক পাওয়া যায়। উভয় পরিস্থিতিতে আপনি নিয়মটি তর্ক করতে পারেন, তবে আমার মনে হয় আপনার স্কুলে না থেকে কোনও চাকরিতে ভাগ্য ভাল হবে। আপনি অনেক শিক্ষার্থীর মধ্যে অন্য একজন, আপনার আসনটি শীঘ্রই প্রতিস্থাপন করা হবে, অধ্যাপকরা অভ্যাস করবেন না এমন একটি চাকরিতে আপনি এমন একটি খেলোয়াড়ের একটি ছোট দল যা এই পণ্যটি শেষ পর্যন্ত দেখতে হবে এবং সেই পরিবেশে বিকাশিত নিয়মগুলি হল দলের সদস্যদের পাশাপাশি পণ্য এবং সংস্থার উপকার, সুতরাং যদি প্রত্যেকেই মনের মত হন বা নির্দিষ্ট পণ্যের জন্য যদি আপনি কলেজটিতে জেনেছেন এমন কিছু বা জেনেরিক প্রোগ্রামিংয়ের কোনও বই লঙ্ঘনের উপযুক্ত ইঞ্জিনিয়ারিং কারণ রয়েছে, তবে আপনার ধারণাটি দলে বিক্রি করুন এবং পছন্দসই পদ্ধতি না হলে একটি বৈধ হিসাবে লিখুন । বাস্তব বিশ্বে সবকিছুই ফর্সা খেলা game
আপনি যদি স্কুল বা বইয়ে আপনাকে শেখানো সমস্ত প্রোগ্রামিং বিধি অনুসরণ করেন তবে আপনার প্রোগ্রামিং ক্যারিয়ার অত্যন্ত সীমাবদ্ধ থাকবে। আপনি সম্ভবত বেঁচে থাকতে পারেন এবং একটি কার্যকর ক্যারিয়ার থাকতে পারেন তবে আপনার জন্য উপলব্ধ পরিবেশগুলির প্রস্থ এবং প্রস্থটি অত্যন্ত সীমাবদ্ধ থাকবে। আপনি যদি জানেন যে কীভাবে এবং কেন নিয়ম রয়েছে এবং এটি রক্ষা করতে পারে তবে ভাল, যদি আপনি কেবল কারণটি করেন কারণ "কারণ আমার শিক্ষক তাই বলেছিলেন", ভাল তাই ভাল না।
নোট করুন যে এর মতো বিষয়গুলি প্রায়শই কর্মক্ষেত্রে যুক্তিযুক্ত হয় এবং অবিরত থাকবে, সংকলক এবং প্রসেসর (এবং ভাষাগুলি) যেমন এই ধরণের বিধিগুলি তৈরি করে এবং আপনার অবস্থানকে রক্ষা না করে এবং সম্ভবত অন্য কোনও মতামত দিয়ে কাউকে একটি পাঠ শেখানো হয় না সামনে যাও.
মাঝামাঝি সময়ে, তবে যে ব্যক্তি সবচেয়ে জোরে কথা বলে বা সবচেয়ে বড় লাঠি বহন করে তা যা করুক (যতক্ষণ না আপনি সেই ব্যক্তি হিসাবে যে সবচেয়ে জোরে চিৎকার করে এবং সবচেয়ে বড় লাঠি বহন করে)।
আমি এই থ্রেড জুড়ে যে বিন্দুটি তৈরি হচ্ছে তার বিরুদ্ধে তর্ক করতে চাই যে এটি মাল্টি থ্রেডিং কঠিন বা অসম্ভবকে প্রতি অসম্ভব করে তোলে। গ্লোবাল ভেরিয়েবলগুলি শেয়ারড স্টেট হয় তবে গ্লোবালের বিকল্পগুলি (যেমন চারপাশে পয়েন্টারগুলি পাশ করা হয়) রাষ্ট্রও ভাগ করে নিতে পারে। মাল্টি-থ্রেডিংয়ের সমস্যা হ'ল কীভাবে সঠিকভাবে ভাগ করা রাষ্ট্রটি ব্যবহার করা যায়, তা নয় যে সেই রাষ্ট্রটি বিশ্বব্যাপী পরিবর্তনশীল বা অন্য কোনও কিছুর মাধ্যমে ভাগ করা হবে whether
আপনি যখন মাল্টি থ্রেডিং করেন তখন বেশিরভাগ সময় আপনার কিছু ভাগ করে নেওয়া দরকার। উদাহরণস্বরূপ একজন উত্পাদক-গ্রাহক প্যাটার্নে, আপনি কিছু থ্রেড-নিরাপদ সারি ভাগ করতে পারেন যার মধ্যে ওয়ার্ক ইউনিট রয়েছে। এবং আপনাকে এটি ভাগ করার অনুমতি দেওয়া হয়েছে কারণ সেই ডেটা স্ট্রাকচারটি থ্রেড-নিরাপদ। সেই সারিটি বিশ্বব্যাপী কিনা তা থ্রেড-সুরক্ষার ক্ষেত্রে সম্পূর্ণ অপ্রাসঙ্গিক।
এই থ্রেড জুড়ে প্রকাশিত অন্তর্নিহিত আশাটি যে একক থ্রেড থেকে বহু-থ্রেডে কোনও প্রোগ্রামকে রূপান্তরিত করা সহজ হবে যখন গ্লোবালগুলি ব্যবহার না করা সহজ। হ্যাঁ, গ্লোবালগুলি নিজেকে পায়ে গুলি করা আরও সহজ করে তোলে তবে নিজেকে গুলি করার অনেক উপায় রয়েছে।
আমি গ্লোবালদের পক্ষে নিচ্ছি না, যেমন অন্যান্য পয়েন্ট এখনও দাঁড়িয়ে আছে, আমার বক্তব্যটি কেবল এই যে কোনও প্রোগ্রামে থ্রেডের সংখ্যার পরিবর্তনশীল সুযোগের সাথে কোনও সম্পর্ক নেই।
হ্যাঁ, কারণ যদি আপনি অযোগ্য প্রোগ্রামারগুলিকে এগুলি ব্যবহার করতে দেন (90% বিশেষত বিজ্ঞানীরা পড়ুন) আপনি 20+ ফাইলের মধ্যে 600+ গ্লোবাল ভেরিয়েবল এবং 12,000 লাইনের একটি প্রকল্পের সমাপ্তি করুন যেখানে 80% ফাংশন শূন্য হয়, প্রত্যাবর্তন বাতিল হয় এবং পরিচালনা করে সম্পূর্ণ বিশ্বব্যাপী রাজ্যে।
আপনি পুরো প্রকল্পটি না জানলে কোনও এক পর্যায়ে কী চলছে তা বোঝা দ্রুত অসম্ভব হয়ে পড়ে।
গ্লোবাল ভেরিয়েবলের ব্যবহার আসলে প্রয়োজনীয়তার উপর নির্ভর করে। এর সুবিধাটি হ'ল এটি বারবার মানগুলি পাস করার ওভারহেড হ্রাস করে।
তবে আপনার অধ্যাপক ঠিক বলেছেন কারণ এটি সুরক্ষার সমস্যা উত্থাপন করে তাই বিশ্বব্যাপী ভেরিয়েবলের ব্যবহার যথাসম্ভব এড়ানো উচিত। গ্লোবাল ভেরিয়েবলগুলি এমন সমস্যা তৈরি করে যা কখনও কখনও ডিবাগ করা কঠিন ।
উদাহরণ স্বরূপ:-
পরিস্থিতি যখন ভেরিয়েবল মান হচ্ছে পরিবর্তিত উপর রানটাইম । এই মুহুর্তে কোডের কোন অংশটি এটি সংশোধন করছে এবং কোন শর্তে তা সনাক্ত করা শক্ত।
কনফিগারেশনের ক্ষেত্রে গ্লোবাল ভাল । আমরা আমাদের চান, তখন কনফিগারেশন / পরিবর্তন একটি আছে বিশ্বব্যাপী প্রভাব উপর সমগ্র প্রকল্প ।
সুতরাং আমরা একটি কনফিগারেশন পরিবর্তন করতে পারি এবং পরিবর্তনগুলি পুরো প্রকল্পের দিকে পরিচালিত হয় । তবে আমি অবশ্যই সতর্ক করেছিলাম আপনাকে গ্লোবালগুলি ব্যবহার করতে খুব স্মার্ট হতে হবে।
যত তাড়াতাড়ি বা পরে আপনাকে সেই পরিবর্তনশীলটি কীভাবে সেট করা হয় বা এটি অ্যাক্সেস করা হয় তখন কী ঘটে যায় তা পরিবর্তন করতে হবে, অথবা আপনাকে যেখানে এটি পরিবর্তন করা হয়েছে সেখানে সন্ধান করতে হবে।
বৈশ্বিক ভেরিয়েবল না রাখাই ব্যবহারিকভাবে সর্বদা ভাল। কেবল বাঁধটি পেতে এবং পদ্ধতিগুলি সেট করে লিখুন এবং আপনার যখন কোনও দিন, সপ্তাহ বা মাস পরে প্রয়োজন হয় তখন আপনি গ্রন্থি হন।
আমি সাধারণত মানগুলির জন্য গ্লোবাল ব্যবহার করি যা গতিশীল লোড লাইব্রেরিতে ফাংশনগুলিতে সিঙ্গলটনের বা ফাংশন পয়েন্টারের মতো খুব কমই পরিবর্তিত হয়। মাল্টিথ্রেডেড অ্যাপ্লিকেশনগুলিতে পরিবর্তনীয় গ্লোবালগুলি ব্যবহার করার ফলে বাগ ট্র্যাক করা শক্ত হয়ে যায় তাই আমি এটিকে একটি সাধারণ নিয়ম হিসাবে এড়াতে চেষ্টা করি।
আর্গুমেন্ট পাস করার পরিবর্তে গ্লোবাল ব্যবহার করা প্রায়শই দ্রুত হয় তবে আপনি যদি আজকাল প্রায়শই করেন এমন একটি মাল্টিথ্রেডেড অ্যাপ্লিকেশন লিখেন তবে এটি সাধারণত খুব ভাল কাজ করে না (আপনি থ্রেড-স্ট্যাটিক্স ব্যবহার করতে পারেন তবে পারফরম্যান্স লাভ প্রশ্নবিদ্ধ) ।
কোনও এন্টারপ্রাইজের মধ্যে থাকা ওয়েব অ্যাপ্লিকেশনগুলিতে অপ্টিমাইজেশনের কারণে সার্ভারে সেশন / উইন্ডো / থ্রেড / ব্যবহারকারীর নির্দিষ্ট ডেটা ধরে রাখার জন্য এবং সংযোগ অস্থির যেখানে কাজের ক্ষতির বিরুদ্ধে সংরক্ষণের জন্য ব্যবহার করা যেতে পারে। উল্লিখিত হিসাবে, জাতির শর্তগুলি পরিচালনা করা দরকার। আমরা এই তথ্যের জন্য একটি শ্রেণীর একক উদাহরণ ব্যবহার করি এবং এটি সাবধানে পরিচালিত হয়।
দিনের শেষে, আপনার প্রোগ্রাম বা অ্যাপ্লিকেশনটি এখনও কাজ করতে পারে তবে এটি পরিপাটি হওয়া এবং কী চলছে তা সম্পর্কে সম্পূর্ণ বোঝা থাকার বিষয়। আপনি যদি সমস্ত ফাংশনের মধ্যে একটি পরিবর্তনশীল মান ভাগ করেন, তবে কোন ফাংশনটি মান পরিবর্তন করছে তা সনাক্ত করা কঠিন হয়ে উঠতে পারে (যদি ফাংশনটি এমনটি করে) এবং এক মিলিয়ন বার ডিবাগিংকে আরও শক্ত করে তোলে
সুরক্ষার অর্থ হ'ল যে কেউ ভেরিয়েবলগুলি বিশ্বব্যাপী ঘোষিত করা হলে তা ব্যবহার করতে পারে, উদাহরণস্বরূপ এই উদাহরণটি গ্রহণ করুন যদি আপনার ব্যাঙ্ক প্রোগ্রামে বৈশ্বিক পরিবর্তনশীল হিসাবে আপনার ভারসাম্য থাকে তবে ব্যবহারকারী ফাংশন এটি পরিচালনা করতে পারে পাশাপাশি ব্যাংক অফিসারও ম্যানিপুলেট করতে পারে এটির ফলে সমস্যা রয়েছে on কেবলমাত্র ব্যবহারকারীকে কেবল পঠন এবং ফিরিয়ে ফাংশন দেওয়া উচিত তবে ব্যবহারকারী ব্যক্তিগতভাবে ডেস্কে নগদ দিলে ব্যাঙ্কের কেরানি সেই পরিমাণটি যুক্ত করতে পারেন th এইভাবেই এটি কাজ করে
একটি বহু-থ্রেড অ্যাপ্লিকেশনটিতে, জাতিটির শর্ত এড়াতে গ্লোবাল ভেরিয়েবলের জায়গায় স্থানীয় ভেরিয়েবল ব্যবহার করুন।
কমপক্ষে একটি থ্রেডে ডেটাতে লেখার অ্যাক্সেস থাকা সহ একাধিক থ্রেড একটি ভাগ করা সংস্থানে অ্যাক্সেস করলে একটি রেস শর্ত দেখা দেয়। তারপরে, প্রোগ্রামটির ফলাফল অনুমানযোগ্য নয়, এবং বিভিন্ন থ্রেড দ্বারা ডেটাতে অ্যাক্সেসের ক্রমের উপর নির্ভর করে।
এটি সম্পর্কে এখানে আরও জানুন , https://software.intel.com/en-us/articles/use-intel-parallel-inspector-to-find-race-conditions-in-openmp-based-multithreaded-code