IDisposable のサンプルで↓をよく見るけど、disposed フラグはマルチスレッド考慮する必要なし?
Interlocked 使ってフラグ入れ替えた方が安全じゃないかと思ったりする・・

protected virtual void Dispose(bool disposing)
{
 if(!disposed){
  if(disposing){
   // Free other state (managed objects).
  }
  // Free your own state (unmanaged objects).
  // Set large fields to null.
  disposed = true;
 }
}