هل من الجيد اختبار الحالة ثم القفل ثم إعادة اختبار الحالة [نسخة مكررة]

StackOverflow https://stackoverflow.com/questions/5036518

سؤال

التكرار المحتمل:
تم التحقق من القفل في .net

يحرر: الكثير من التعديلات لتوضيح أن هذا السؤال لا يتعلق بالمفردة

أجد نفسي أكتب رمزًا مثل هذا:

    if(resourceOnDiskNeedsUpdating)
    {
        lock(lockObject)
        {
            if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
                UpdateResourceOnDisk();
        }
    }
    return LoadResourceFromDisk();

UpdateResource() هي عملية بطيئة.هل هذا النمط منطقي؟
هل هناك بدائل أفضل؟

هل كانت مفيدة؟

المحلول

وهذا ما يسمى "القفل المزدوج".

أنت بحاجة إلى سياج ذاكرة لتصحيحه.

يرى مقالة ويكيبيديا عن القفل المزدوج في .NET

نصائح أخرى

البديل الذي أستخدمه هو استخدام الكلمة الرئيسية "المتقلبة" فقط.http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top