非常に基本的なロガーのこのコードでは:
lock (string.Concat("LogWritter_", this.FileName))
{
using (var fileStream = File.Open(this.FileName, FileMode.Append, FileAccess.Write, FileShare.Read))
{
using (var w = new StreamWriter(fileStream))
{
w.Write(message);
}
}
}
いくつかのスレッドから同時に試してみると、すぐにエラーが発生します。
The process can't access the file because its being used by another file.
スレッドが同時にファイルにアクセスすることをロックが妨げないのはなぜですか?
スレッドが同じインスタンスを呼び出すか、同じファイルに対して異なるインスタンスを呼び出すかは問題ではありません。また、Windowsでファイルを書き込むときの遅延が原因である可能性があると思いましたが、Linuxでも同じことが起こります。