რა განსხვავებაა ვოლატილობასა და ატომარობას შორის მრავალმხრივი პროგრამირების კონტექსტში?
sobes.tech AI
პასუხი AI-სგან
volatile সকলো থ্ৰেডৰ দ্বাৰা পৰিবৰ্তনসমূহৰ দৃশ্যমানতা নিশ্চিত কৰে। যেতিয়া এটা থ্ৰেড volatile পৰিবৰ্তনলৈ মান লিখে, এই পৰিবৰ্তন অন্য থ্ৰেডসমূহৰ বাবে তৎক্ষণাৎ দৃশ্যমান হয়। ইয়াৰ উপৰিও, volatile পৰিবৰ্তনসমূহৰ বাবে পঢ়া আৰু লিখা অপাৰেশ্যনসমূহৰ পুনৰ অনুক্ৰমণ নিষিদ্ধ কৰে।
অ্যাটমিক অপাৰেশ্যনসমূহ ( java.util.concurrent.atomic পেকেজৰ অ্যাটমিক ক্লাছসমূহ) নিশ্চিত কৰে যে পৰিবৰ্তনৰ ওপৰত কৰা অপাৰেশ্যন একক একক আৰু অন্য থ্ৰেডৰ দ্বাৰা বিঘ্নিত নহয়। এইবোৰ ইনক্রিমেণ্ট, ডিক্রিমেণ্ট আৰু Compare-And-Swap অপাৰেশ্যনসমূহৰ সঠিকতা নিশ্চিত কৰে synchronized ব্যৱহাৰ নকৰাকৈ।
মূল পাৰ্থক্য: volatile কেৱল দৃশ্যমানতা নিশ্চিত কৰে, কিন্তু গঠিত অপাৰেশ্যনসমূহৰ (উদাহৰণস্বৰূপ, i++ — পঢ়া, বৃদ্ধি আৰু লিখা) অ্যাটমিকতা নিশ্চিত নকৰে। অ্যাটমিক ক্লাছসমূহ একোটা অপাৰেশ্যনৰ লগতে দৃশ্যমানতা নিশ্চিত কৰে।
উদাহৰণ:
class VolatileCounter {
volatile int count = 0;
public void increment() {
// এই অপাৰেশ্যনটি অ্যাটমিক নয়
count++;
}
}
class AtomicCounter {
java.util.concurrent.atomic.AtomicInteger count = new java.util.concurrent.atomic.AtomicInteger(0);
public void increment() {
// এই অপারেশ্যনটি অ্যাটমিক
count.incrementAndGet();
}
}