تكرار السؤال: …
الإجابة المختصرة
تعتمد تعليمات CAS على تعليمة ذرية مدمجة بالمعالج تقارن محتوى الذاكرة بقيمة متوقعة، وإذا تطابقت تستبدلها بالقيمة الجديدة بنجاح؛ وإذا فشلت يعيد الخيط المحاولة دون حجز أي قفل.
الشرح
الأقفال التقليدية تضع الخيط في النوم عند التعارض وتكلف تبديلاً سياقياً باهظاً. أما المتغيرات الذرية (مثل AtomicInteger في Java أو std::atomic في C++) فتستخدم حلقة متكررة خفيفة (CAS Loop): يقرأ الخيط القيمة الحالية، يحسب القيمة الجديدة، وينفذ تعليمة CAS. إذا عدل خيط آخر القيمة في نفس النانوثانية، تفشل التعليمة فيدور الخيط ثانية ويقرأ القيمة المحدثة فوراً، محققاً أداءً فائقاً وإنتاجية هائلة (High Throughput).
مثال بالكود
// مفهوم حلقة CAS الذرية بدون أقفال:
do {
current = value.get();
next = current + 1;
} while (!value.compareAndSet(current, next));أخطاء شائعة
- تعرض خوارزميات CAS لمشكلة ABA الشهيرة، حيث تتغير القيمة من A إلى B ثم تعود إلى A دون أن يكتشف الخيط أن المحتوى قد تم تعديله بالفعل.