c# - 在c#中为静态对象分配一个新值是否线程安全

标签 c# thread-safety

采用以下代码,在多线程环境中会发生什么:

static Dictionary<string,string> _events = new Dictionary<string,string>();

public static Dictionary<string,string> Events { get { return _events;} }

public static void ResetDictionary()
{
    _events = new Dictionary<string,string>();
}

在多线程环境中,不同线程可以同时访问此方法和属性。

将新对象分配给可在不同线程中访问的静态变量是否是线程安全的?会出现什么问题?

是否存在事件可以为空的时刻?例如,如果 2 个线程同时调用 EventsResetDictionary()

最佳答案

Is it thread safe to assign a new object to a static variable that is accessible in different threads?

基本上,是的。从某种意义上说,该属性永远不会无效或 null

What can go wrong ?

一个阅读线程可以在另一个线程重置旧字典后继续使用它。这有多糟糕完全取决于您的程序逻辑和要求。

关于c# - 在c#中为静态对象分配一个新值是否线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18273004/

相关文章:

java - 在Android中什么时候应该使用锁,什么时候应该使用synchronized?有区别吗?

java - AtomicInteger 不从主内存读取值以进行非 volatile 可变引用

c# - 使用枚举值

c# - 你如何处理 .net 中的 'Ambiguous Time'?

c# - Entity Framework 错误...属性无法设置为 'System.Int16' 值

c++ - 如何在 Linux 上获得等效的 printf_l?

c# - 使用 C# NHunspell 我如何检查单词?

c# - 使用 XamlRenderingBackgroundTask 呈现不在可视化树中的图像

java - 如何在android中为多个线程使用多个按钮?

java - 从多线程设置和更新并发 HashMap