1. خوارزمية عدم الحظر
الخوارزميات غير المحظورة هي خوارزميات متزامنة يمكنها نشر سلاسلها بأمان ليس من خلال عمليات نشر القفل، ولكن من خلال أشكال ذرية منخفضة المستوى للأجهزة - مثل المقارنات والمقايضات. من الصعب للغاية تصميم وتنفيذ الخوارزميات غير المحظورة، ولكنها يمكن أن توفر إنتاجية أفضل ودفاعًا أفضل ضد مشاكل البقاء مثل الجمود وانعكاس الأولوية. استخدم تعليمات الآلة الذرية ذات المستوى المنخفض لاستبدال الأقفال، مثل المقارنة والمبادلة (CAS).
2. التكنولوجيا المتشائمة
القفل الحصري هو أسلوب متشائم يفترض حدوث السيناريو الأسوأ (إذا لم يتم القفل، فستؤدي الخيوط الأخرى إلى تدمير حالة الكائن)، وحتى إذا لم يحدث السيناريو الأسوأ، فستظل حالة الكائن محمية بواسطة قفل.
3. التكنولوجيا المتفائلة
مراقبة تعارض التبعية. قم بالتحديث أولاً. في حالة حدوث تعارض أثناء المراقبة، قم بالتخلي عن التحديث وحاول مرة أخرى، وإلا فإن التحديث ناجح. -و- المبادلة).
4. عملية CAS
تحتوي CAS على 3 معاملات، قيمة الذاكرة V، والقيمة القديمة المتوقعة A، والقيمة الجديدة المراد تعديلها B. إذا كانت القيمة المتوقعة A وقيمة الذاكرة V متطابقتين فقط، فقم بتعديل قيمة الذاكرة V إلى B، وإلا فلا تفعل شيئًا. نمط الاستخدام النموذجي لـ CAS هو: أولاً قراءة A من V، وحساب القيمة الجديدة B بناءً على A، ثم استخدم CAS لتغيير القيمة في V ذريًا من A إلى B (طالما لم يغير أي خيط قيمة V خلال هذه الفترة) القيمة إلى قيمة أخرى).
القائمة 3. الكود الذي يوضح السلوك (ولكن ليس الأداء) للمقارنة والمبادلة انسخ الكود أدناه:
فئة عامة مقلدة CAS {
قيمة كثافة العمليات الخاصة؛
public المتزامنة getValue() { قيمة الإرجاع }
int المتزامن العام CompareAndSwap(int المتوقعValue, int newValue) {
int oldValue = value;
إذا (القيمة == القيمة المتوقعة)
القيمة = قيمة جديدة؛
إرجاع القيمة القديمة؛
}
}
القائمة 4. استخدم المقارنة والتبادل لتنفيذ رمز نسخة العداد كما يلي:
الطبقة العامة CasCounter {
قيمة محاكاة CAS الخاصة؛
كثافة العمليات العامة getValue() {
قيمة الإرجاع.getValue();
}
زيادة كثافة العمليات العامة () {
int oldValue = value.getValue();
بينما (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
oldValue = value.getValue();
إرجاع القيمة القديمة + 1؛
}
}
5. المتغيرات الذرية
تدعم المتغيرات الذرية عمليات التحديث الذري دون حماية القفل، ويتم تنفيذ الطبقة الأساسية باستخدام CAS. هناك 12 متغيرًا ذريًا في المجموع، والتي يمكن تقسيمها إلى 4 مجموعات: فئة العددية، فئة التحديث، فئة المصفوفة وفئة المتغير المركب. المتغيرات الذرية الأكثر استخدامًا هي الفئات العددية: AtomicInteger، AtomicLong، AtomicBoolean، وAtomicReference. يتم دعم CAS على جميع الأنواع.
6. مقارنة الأداء: الأقفال والمتغيرات الذرية
في ظل التنافس المنخفض إلى المتوسط، يمكن أن توفر المتغيرات الذرية قابلية توسع عالية، ويتجاوز أداء المتغيرات الذرية أداء الأقفال؛ وفي ظل التنافس عالي الكثافة، يمكن أن تتجنب الأقفال التنافس بشكل أكثر فعالية، وسيتجاوز أداء الأقفال أداء الذري؛ المتغيرات. ولكن في موقف عملي أكثر واقعية، فإن أداء المتغيرات الذرية سوف يتجاوز أداء الأقفال.