"দৃ strongly়তার আগে ঘটে" এই শব্দটি C ++ খসড়া স্ট্যান্ডার্ডে বেশ কয়েকবার ব্যবহৃত হয় is
উদাহরণস্বরূপ: সমাপ্তি [বেসিক.স্টার্ট.টার্ম] / 5
স্ট্যাটিক স্টোরেজ সময়কাল সহ কোনও অবজেক্টের সূচনার কাজটি স্ট্যান্ড :: অ্যাকট্সিট (দেখুন, [সমর্থন.start.term]) কল করার আগে দৃ strongly়তার সাথে ঘটলে, ফাংশনটিতে কলটি std :: atexit এ পাস হয়েছে অবজেক্টের জন্য ডেস্ট্রাক্টরের কাছে কল দেওয়ার আগেই ক্রমযুক্ত। স্থিতিশীল স্টোরেজ সময়কাল সহ কোনও সামগ্রীর সূচনা শেষ হওয়ার আগে যদি std :: axxit এ কলটি দৃ strongly়তার সাথে ঘটে, তবে স্টাড :: অ্যাটেক্সিটে ফাংশনটিতে কল করার আগে অবজেক্টের জন্য ডেস্ট্রাক্টরকে কল করা হবে । যদি std :: axxit এ কলটি std :: axxit এ অন্য কল করার আগে দৃ strongly়ভাবে ঘটে, ফাংশনটিতে কলটি দ্বিতীয় স্টাডকে পাস করেছে :: atexit কলটি ফাংশনটিতে কল পাঠানোর আগেই ক্রমবর্ধমান হয় first std :: atexit কল।
এবং ডেটা রেসগুলিতে সংজ্ঞায়িত [অন্তর্ভুক্তিগুলি] / 12
একটি মূল্যায়ন একটি মূল্যায়ন D এর আগে শক্তভাবে ঘটে যদি হয়, তবে
(12.1) এ ডি এর আগে ক্রমযুক্ত, বা
(১২.২) ডি এর সাথে একটি সিঙ্ক্রোনাইজ হয় এবং এ এবং ডি উভয়ই পরম্পরাগত পারমাণবিক ক্রিয়াকলাপ ([পারমাণবিক.অর্ডার]), বা
(১২.৩) বি এবং সি এর মূল্যায়ন রয়েছে যে বি এর আগে এ সিকোয়েন্সড হয়, বি এর আগে সি এর আগে হয়, এবং সি ডি এর আগে সিকোয়েন্সড হয়, বা
(১২.৪) বি এর এমন একটি মূল্যায়ন রয়েছে যা খ এর আগে একটি শক্তভাবে ঘটে, এবং ডি এর আগে খ দৃ strongly়ভাবে ঘটে B
[দ্রষ্টব্য: অনানুষ্ঠানিকভাবে, যদি বি এর আগে একটি দৃ strongly়ভাবে ঘটে, তবে A সমস্ত ক্ষেত্রেই বি এর আগে মূল্যায়ন করা হবে বলে মনে হয়। ক্রিয়াকলাপ গ্রহণের অপারেশন বাদ দেওয়ার আগে দৃ St়ভাবে ঘটে happens - শেষ নোট]
"দৃ strongly়ভাবে ঘটে যাওয়ার আগে" কেন চালু হয়েছিল? স্বজ্ঞাতভাবে, "এর আগে ঘটে" এর সাথে এর পার্থক্য এবং সম্পর্ক কী?
নোটটিতে "A এর আগে সমস্ত ক্ষেত্রে মূল্যায়ন করা হবে" এর অর্থ কী?
(দ্রষ্টব্য: এই প্রশ্নের অনুপ্রেরণা হ'ল এই উত্তরের অধীনে পিটার কর্ডেসের মন্তব্য ))
অতিরিক্ত খসড়া স্ট্যান্ডার্ড উদ্ধৃতি (পিটার কর্ডসকে ধন্যবাদ)
অর্ডার এবং ধারাবাহিকতা [অ্যাটমিক্স.অর্ডার] / ৪
সমস্ত মেমোরিঅর্ডার :: একক মোট অর্ডার এস রয়েছে বেড়া সহ, seq_cst অপারেশনগুলি, যা নিম্নলিখিত সীমাবদ্ধতাগুলি পূরণ করে। প্রথমত, যদি A এবং B মেমরি_আর্ডার :: seq_cst ক্রিয়াকলাপ হয় এবং A এর আগে বি এর আগে দৃ happens়রূপে ঘটে থাকে, তবে এস এর আগে একটি দ্বিতীয় বি, একটি বস্তু M এর প্রতিটি জোড়ের A এবং B এর জন্য, যেখানে A একত্রিত-আদেশযুক্ত খ এর আগে নিম্নলিখিত চারটি শর্ত এস এর দ্বারা সন্তুষ্ট হওয়া দরকার:
(৪.১) যদি ক এবং বি উভয়ই মেমোরি অর্ডার :: seq_cst ক্রিয়াকলাপ হয়, তবে এস এর আগে পূর্ববর্তী বি; এবং
(৪.২) যদি A একটি মেমোরি অর্ডার :: seq_cst অপারেশন হয় এবং বি একটি মেমোরি_র্ডার :: seq_cst বেড়া ওয়াইয়ের আগে ঘটে থাকে, তবে এস এর আগে পূর্ববর্তী Y; এবং
(৪.৩) যদি একটি মেমরি_র্ডার :: seq_cst বেড়া এক্স হয় A এবং B এর আগে মেমোরি অর্ডার :: seq_cst ক্রিয়াকলাপ, তারপরে এক্স এর পূর্বে এস; এবং
(৪.৪) যদি একটি মেমরি_র্ডার :: seq_cst বেড়া এক্সটি A এবং B এর আগে মেমরি_অর্ডার :: seq_cst বেড়া Y এর আগে ঘটে, তবে এক্স এর আগে এস এর
atexit()
একটি থ্রেডে এবং exit()
অন্যটিতে কল করে তবে প্রাথমিক পর্যায়ে কেবলমাত্র গ্রাহক-নির্ভর নির্ভরতা বহন করা যথেষ্ট নয় কারণ ফলাফলগুলি exit()
একই থ্রেডের দ্বারা আহ্বান করা হলে তার থেকে পৃথক হয়। আমার একটি পুরানো উত্তর এই পার্থক্যটি নিয়েছে।
exit()
। যে কোনও থ্রেড প্রস্থান করে পুরো প্রোগ্রামটিকে মেরে ফেলতে পারে, বা মূল থ্রেড বাই-বাই return
ছাড়তে পারে। এটি atexit()
হ্যান্ডলারের কল এবং সমস্ত থ্রেডের মৃত্যুর ফলাফল যা তারা করছে।
seq_cst
, এ Atomics 31.4 অর্ডার এবং দৃঢ়তা: 4 । এটি সি ++ ১ n এন 659৫৯ স্ট্যান্ডার্ডে নেই, যেখানে 32.4 - 3 সমস্ত প্রভাবিত জায়গাগুলির জন্য "পূর্বে ঘটে" আদেশ এবং সংশোধন আদেশের সাথে সামঞ্জস্য রেখে seq_cst অপের একক সামগ্রিক ক্রমটির অস্তিত্ব নির্ধারণ করে ; "দৃ strongly়ভাবে" পরবর্তী খসড়ায় যুক্ত করা হয়েছিল।