17:33

昔のコードで痛いミスを見つけてしまった。 スレッドごとに同一ファイルの書き込みが行われるので、書き込み中は排他制御を行うようにしたかった。 書いたコードは次のような感じ。

public class Writer
{
  private object lockObj = new object();

  void Write(string oath)
  {
    lock(lockObj)
    {
      file.write(xmlPath);
    }
  }
}

void thread_1()
{
  Writer wr = new Writer();
  wr.Write("test.xml");
}
void thread_2()
{
  Writer wr = new Writer();
  wr.Write("test.xml");
}

しかし、上記コードではWriterのインスタンスが違うので、lockによる排他制御が利かないのであった。 とほほである。