1

重複の可能性:
.netでのロックの再確認

編集:この質問を明確にするための多くの編集はシングルトンに関するものではありません

私は自分がこのようなコードを書いていることに気づきました:

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

UpdateResource()遅い操作です。このパターンは意味がありますか?
より良い選択肢はありますか?

4

2 に答える 2

4

これは「ダブルチェックロック」と呼ばれます。

それを正しくするには、メモリフェンスが必要です。

.NETでのダブルチェックロックに関するウィキペディアの記事を参照してください。

于 2011-02-18T00:47:25.240 に答える
2

私が使用する別の方法は、「volatile」キーワードを使用することです。 http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

于 2011-02-18T00:52:32.867 に答える