【发布时间】:2016-07-18 00:31:45
【问题描述】:
这是我的示例代码,用于使 FileUtil 类成为一个安全的文件 IO 处理程序。
public static class FileUtil {
private static ConcurrentDictionary<string, ReaderWriterLock> s_locks = new ConcurrentDictionary<string, ReaderWriterLock>();
public static string ReadFile(string path) {
var rwLock = s_locks.GetOrAdd(path, new ReaderWriterLock());
rwLock.AcquireReaderLock(1000);
string data = File.ReadAllText(path);
rwLock.ReleaseReaderLock();
return data;
}
public static void WriteFile(string path, string data) {
var rwLock = s_locks.GetOrAdd(path, new ReaderWriterLock());
rwLock.AcquireWriterLock(1000);
using (StreamWriter sw = new StreamWriter(path, true)) {
sw.Write(data);
}
rwLock.ReleaseWriterLock();
}
}
如您所见,我创建了一个并发字典,为不同的文件持有不同的锁,以避免所有文件 IO 使用一个锁。我的实现是否正确?
【问题讨论】:
标签: c# thread-safety file-handling