【发布时间】:2015-03-24 00:29:27
【问题描述】:
我想知道下面的静态类是否是线程安全的,为什么?
public static class Settings
{
public static string AStringSetting { get; set; }
public static int AIntSetting { get; set; }
public static void Load()
{
// load values from database
}
}
我有一个多线程 Windows 服务,它在服务启动时加载设置。 我想在我的服务中添加某种自动刷新。我做了一些测试,运行 200 多个线程读取和写入公共属性,但我无法让进程崩溃......
那个类线程安全吗? 为什么?
【问题讨论】:
-
静态类中不能有非静态属性。你试过运行这个吗?
-
“不崩溃”与线程安全不同。您将不得不考虑您所追求的线程安全类型/级别,问题尚不清楚。
-
@Candide 我在去办公室的火车上用手机写了代码示例。
-
@Henk 我需要服务在高可用性模式下运行,这就是为什么我需要设置自动刷新。我无法在工作时间重启服务
-
@Baral 查看 SQL 依赖关系(使用 Service Broker) 将消息推送到服务以便刷新设置非常有用。实际上,每个正在运行的线程都可以订阅队列,并接收自己的刷新消息。静态属性不是线程安全的,你必须使用锁来读写属性。
标签: c# multithreading static