বুঝতে চেষ্টা যতক্ষণ SubmissionPublisher
( জাভা SE 10, OpenJDK মধ্যে সোর্স কোড | ডক্স ), একটি নতুন শ্রেণী সংস্করণ 9 জাভা SE এ যোগ করেছেন বাস্তবায়িত হয়েছে, আমি কয়েক API কল করার জন্য জুড়ে পদস্খলিত VarHandle
আমি এর পূর্বে সচেতন ছিলাম না:
fullFence
, acquireFence
, releaseFence
, loadLoadFence
এবং storeStoreFence
।
কিছু গবেষণা করার পরে, বিশেষত স্মৃতি বাধা / বেড়া ধারণা সম্পর্কে (আমি তাদের সম্পর্কে আগে শুনেছি, হ্যাঁ; তবে কখনও সেগুলি ব্যবহার করি নি, এইভাবে তাদের শব্দার্থবিজ্ঞানের সাথে একেবারেই অপরিচিত ছিল), আমি মনে করি তারা কীসের জন্য আমার একটি প্রাথমিক ধারণা রয়েছে । তবুও, যেহেতু আমার প্রশ্নগুলি একটি ভুল ধারণা থেকে উত্থাপিত হতে পারে, আমি নিশ্চিত করতে চাই যে আমি এটি প্রথম স্থানে পেয়েছি:
মেমরি বাধা পড়া এবং লেখার ক্রিয়াকলাপ সংক্রান্ত সীমাবদ্ধতাগুলি পুনরায় সাজিয়ে তুলছে।
মেমরি বাধা দুটি প্রধান বিভাগে শ্রেণিবদ্ধ করা যেতে পারে: একমুখী এবং দ্বিদ্বিচারী মেমরি বাধা, তার উপর নির্ভর করে তারা পড়তে বা লিখতে বা উভয় ক্ষেত্রেই বাধা নির্ধারণ করে।
সি ++ বিভিন্ন ধরণের মেমরি বাধা সমর্থন করে , তবে এটি সরবরাহিতগুলির সাথে মেলে না
VarHandle
। তবে, মেমরি উপলব্ধ বাধা কিছুVarHandle
প্রদান ক্রম প্রভাব যে সামঞ্জস্যপূর্ণ তাদের সংশ্লিষ্ট সি ++ মেমরির বাধা রয়েছে।#fullFence
সাথে সামঞ্জস্যপূর্ণatomic_thread_fence(memory_order_seq_cst)
#acquireFence
সাথে সামঞ্জস্যপূর্ণatomic_thread_fence(memory_order_acquire)
#releaseFence
সাথে সামঞ্জস্যপূর্ণatomic_thread_fence(memory_order_release)
#loadLoadFence
এবং#storeStoreFence
কোনও উপযুক্ত সি ++ কাউন্টার অংশ নেই
সামঞ্জস্যপূর্ণ শব্দটি এখানে সত্যিই গুরুত্বপূর্ণ বলে মনে হচ্ছে কারণ শব্দার্থে স্পষ্টতই আলাদা হয় যখন এটি বিশদ আসে। উদাহরণস্বরূপ, সমস্ত সি ++ বাধাগুলি দ্বিপাক্ষিক, যেখানে জাভার বাধাগুলি (অগত্যা) নয়।
- বেশিরভাগ মেমরি বাধাগুলির মধ্যে সিঙ্ক্রোনাইজেশন প্রভাব থাকে। এগুলি বিশেষত ব্যবহৃত থেমে থাকা বাধার ধরণ এবং অন্যান্য থ্রেডে পূর্বে সম্পাদিত বাধা নির্দেশের উপর নির্ভর করে। বাধা নির্দেশের সম্পূর্ণ প্রভাবগুলি যেমন হার্ডওয়্যার-নির্দিষ্ট, তাই আমি উচ্চ-স্তরের (সি ++) বাধাগুলির সাথে আটকে থাকব। উদাহরণস্বরূপ, সি ++ এ, একটি রিলিজ বাধা নির্দেশের পূর্বে করা পরিবর্তনগুলি একটি অর্জন বাধা নির্দেশ কার্যকরকারী থ্রেডে দৃশ্যমান ।
আমার অনুমানগুলি কি সঠিক? যদি তা হয় তবে আমার ফলাফলগুলি হ'ল:
মেমরি বাধা উপলব্ধ কি
VarHandle
কোনও ধরণের মেমরি সিঙ্ক্রোনাইজেশন কারণ?তারা মেমরি সিঙ্ক্রোনাইজেশন ঘটায় বা না তা নির্বিশেষে, জাভাতে পুনরায় ক্রমাগত সীমাবদ্ধতাগুলি কী কার্যকর হতে পারে? জাভা মেমোরি মডেলটি ইতিমধ্যে অস্থির ক্ষেত্রগুলি, লকগুলি বা এর
VarHandle
মতো ক্রিয়াকলাপের#compareAndSet
সাথে জড়িত থাকার সময় অর্ডার সম্পর্কিত কিছু খুব দৃ strong় গ্যারান্টি দেয় ।
আপনি যদি একটি উদাহরণ সন্ধান করছেন: পূর্বোক্ত BufferedSubscription
, SubmissionPublisher
(উপরের লিঙ্কযুক্ত উত্স) এর একটি অভ্যন্তর শ্রেণি 1079 লাইনে একটি সম্পূর্ণ বেড়া স্থাপন করেছে (ফাংশন growAndAdd
; লিঙ্কযুক্ত ওয়েবসাইটটি খণ্ড সনাক্তকারীকে সমর্থন করে না, কেবল এটির জন্য সিটিআরএল + এফ )। তবে এটি কীসের জন্য তা আমার পক্ষে অস্পষ্ট।
plain -> opaque -> release/acquire -> volatile (sequential consistency)
।