その後、条件をテストするのは良いことです。その後、条件を再テストします。

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

質問

可能な重複:
.NET のダブルチェックロック

編集:この質問を明確にするための編集のたくさんはシングルトンについてではありません。

私は自分自身がこのようなコードを書くのを見つけます:

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

UpdateResource()は遅い動作です。 このパターンは意味がありますか?
代替案はありますか?

役に立ちましたか?

解決

This called "double-checked locking".

You need a memory fence to make it correct.

See Wikipedia's article on double checked locking in .NET

他のヒント

An alternative I use would be to just use the 'volatile' keyword. http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top