相关疑难解决方法(0)

C#中的"const正确性"

const-correctness的要点是能够提供用户无法更改或删除的实例的视图.编译器支持这一点,指出何时从const函数中断开constness,或者尝试使用const对象的非const函数.因此,如果不复制const方法,我可以在C#中使用具有相同目的的方法吗?

我知道不变性,但这并不能真正地将容器对象转移到一个例子.

c# theory const-correctness

78
推荐指数
3
解决办法
1万
查看次数

这个示例线程是否安全?

假设我有一个充当数据缓存的单例类.多个线程将从缓存中读取,并且单个线程将定期刷新它.它看起来像这样:

public sealed class DataStore
{
    public static DataStore Instance { get { return _instance; } }
    public Dictionary<Foo, Bar> FooBar { get; private set; }

    static DataStore() { }
    private DataStore() { }

    public void Refresh() {
        FooBar = GetFooBarFromDB();
    }

    private static readonly DataStore _instance = new DataStore();
}
Run Code Online (Sandbox Code Playgroud)

我的问题基本上是Refresh(),其他线程可能访问时FooBar是否安全?我需要使用锁,还是我的获取和设置操作是原子的?我是否需要显式声明volatile字段来备份我的属性?

PS,如果有人能想到这个问题的更具描述性的标题,我很乐意欢迎它.

编辑:修复了我的例子来明显纠正非原子代码.

.net c# multithreading thread-safety

3
推荐指数
1
解决办法
1356
查看次数