我有一个看起来很像这样的单例类,
public class CfgHandler
{
private static readonly string ConfigDir = "Config";
public T Get<T>() where T : class, new()
{
string cfgFile = Path.Combine(ConfigDir, typeof(T).FullName + ".json");
if (File.Exists(cfgFile))
{
var reader = new JsonReader();
return reader.Read<T>(File.ReadAllText(cfgFile));
}
return null;
}
public void Set<T>(T instance) where T : class, new()
{
string cfgFile = Path.Combine(ConfigDir, typeof(T).FullName + ".json");
var writer = new JsonWriter();
string json = writer.Write(instance);
File.WriteAllText(cfgFile, json);
}
}
该类用于多线程环境,我想添加锁。但不是全班都有一把锁,因为我不希望它们之间存在竞争条件cfg.Set<Foo>();
,cfg.Set<Bar>()
因为它们处理不同的数据。
我考虑过将以下课程添加到CfgHandler
,
private static class Locks<T>
{
private static object _lock = new object();
public static object Lock { get { return _lock; } }
}
然后像这样锁定(用于获取和设置),
public void Set<T>(T instance) where T : class, new()
{
lock(Locks<T>.Lock)
{
// save to disk
}
}
我错过了一些微不足道的事情吗?有没有更好的方法来实现我的目标?