エラー：ストリームを読み取れませんでした。


「ストリームを読み取れませんでした。」というエラーが出るのですが、  
原因を特定することが出来ないので質問させていただきました。

現在クラス変数で宣言している１つのストリーム変数に対して、  
二つのマルチスレッドで、交互にストリームを生成・上書きを1秒おきに繰り返しています。  
そして、そのストリームを別スレッドで定期的にBinaryReaderで読み込んでいます。

マルチスレッドによって、常にストリーム変数にストリームが格納されている状態なので、今回のようなエラーは起こりえないと考えていますが、ランダムなタイミングで今回のエラーが発生する状況です。  
このエラーの解決方法や原因が分かる方がいましたら、ご教授をお願いします。

～大まかですがソースを載せます

[code]

    // ストリーム
    private Stream stream;
    
    public void reader()
    {
     // ストリーム生成処理呼び出し
     Thread thread_A = new Thread(new ThreadStart(A));
     thread_A.Start();
    
     while (true)
     {
       try
       {
         using (BinaryReader reader = new BinaryReader(this.stream))
         {
          　読み取り処理
         }
         reader.Close();
         Thread.Sleep(1000);
       }
       catch{
       ストリームが読み取れませんでした。
       }
     }
    
    private void A()
    {
        while (true)
        {
           // ストリーム生成処理
          thread thread_A = new Thread(new ThreadStart(B));
          thread_A.Start();
          Thread.Sleep(1000);
    
          // ストリーム生成処理
          Thread thread_B = new Thread(new ThreadStart(C));
          thread_B.Start();
          Thread.Sleep(1000);
        }
     }
    
    private void B()
    { 
       this.stream = File.Open(path, FileMode.Open, FileAccess.Read,     FileShare.ReadWrite);
    }
    private void C()
    { 
       this.stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    }
    
[/code]




BinaryReader/BinaryWriterともにスレッドセーフでは、ありません。

AとBのスレッドがあるとして、  
ABABABABAB…のような動作は、保証されません。  
ABBAABBBAA…のように順不同になります。  
つまり、処理の順番は、保証されません。

場合によっては、何らかの遅延、タイミングでデータが存在しない場合もありえます。  
このような問題を解決するには、適切に排他制御を行うことです。




BinaryReader/BinaryWriterともにスレッドセーフでは、ありません。

AとBのスレッドがあるとして、  
ABABABABAB…のような動作は、保証されません。  
ABBAABBBAA…のように順不同になります。  
つまり、処理の順番は、保証されません。

場合によっては、何らかの遅延、タイミングでデータが存在しない場合もありえます。  
このような問題を解決するには、適切に排他制御を行うことです。

