هل من الجيد اختبار الحالة ثم القفل ثم إعادة اختبار الحالة [نسخة مكررة]
-
15-11-2019 - |
سؤال
التكرار المحتمل:
تم التحقق من القفل في .net
يحرر: الكثير من التعديلات لتوضيح أن هذا السؤال لا يتعلق بالمفردة
أجد نفسي أكتب رمزًا مثل هذا:
if(resourceOnDiskNeedsUpdating)
{
lock(lockObject)
{
if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
UpdateResourceOnDisk();
}
}
return LoadResourceFromDisk();
UpdateResource()
هي عملية بطيئة.هل هذا النمط منطقي؟
هل هناك بدائل أفضل؟
المحلول
وهذا ما يسمى "القفل المزدوج".
أنت بحاجة إلى سياج ذاكرة لتصحيحه.
نصائح أخرى
البديل الذي أستخدمه هو استخدام الكلمة الرئيسية "المتقلبة" فقط.http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx
لا تنتمي إلى StackOverflow