Est-il bon de tester une condition puis de la verrouiller puis de re-tester la condition [duplicata]

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

Question

Doublon possible :
Verrouillage revérifié dans .net

MODIFIER: beaucoup de modifications pour clarifier cette question ne concerne pas singleton

Je me retrouve à écrire du code comme ceci :

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

UpdateResource() est une opération lente.Ce modèle a-t-il un sens ?
Existe-t-il de meilleures alternatives ?

Était-ce utile?

La solution

C'est ce qu'on appelle un "verrouillage à double contrôle".

Vous avez besoin d'une barrière de mémoire pour que cela soit correct.

Voir Article de Wikipédia sur le verrouillage à double vérification dans .NET

Autres conseils

Une alternative que j'utilise serait d'utiliser simplement le mot-clé « volatile ».http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top