ここでは、FileUtilクラスを安全なファイルIOハンドラにするためのサンプルコードを示します。(C#)ファイルの読み取り/書き込みスレッドセーフ(およびパフォーマンスを考慮する)
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();
}
}
uは見ての通り、私は1つのロックを使用して、すべてのファイルIOを避けるために、異なるファイルごとに異なるロックを保持同時dicionaryを作成しました。私の実装は正しいですか?
テストし、 – MickyD