これを推論できます。メモリ マップド ファイルは、複数のプロセスからバイトにアクセスできる、プログラム内の単なるメモリのチャンクです。このチャンクは特定のアドレスに存在するため、マネージ コードではかなり厄介です。ポインターを使用してデータにアクセスする必要があるため、マネージド コードではタブーです。MemoryMappedFileViewAccessor はそのポインターをラップし、マネージ メモリから共有メモリにデータをコピーします。これは、MMF を使用する主な理由と、それらのサポートが .NET に現れるまでに長い時間がかかった理由に反することに注意してください。代わりに名前付きパイプを使用しないようにしてください。
したがって、これを推論すると、グローバル変数がコード内にあるのと同じように、これは共有メモリであるため、MMF は設計上スレッドセーフではありません。スレッドが共有メモリの同じセクションを読み書きすると、まったく同じように問題が発生します。また、1 つのスレッドだけが共有セクションにアクセスできるようにするためのロックも、まったく同じように保護する必要があります。
また、MMF を読み書きするプロセス間でそのロックを実装する必要があることにも注意してください。「マスター」プロセスが作成し、「スレーブ」プロセスが開く名前付きミューテックスを使用する必要があります。そのロック要件を軽視することはできません。注目すべきは、質問でこれを処理することについて言及したことがないため、赤旗です。
1 つのプロセス内で、MMF の同じセクションにアクセスしないスレッドは、相互にアクセスできません。異なる変数にアクセスする 2 つのスレッドが同期を必要としないのと同じように。別のプロセスがセクションに書き込むことができないことを保証するミューテックスを保持している限り。これはおそらく、セマフォを使用して MMF アクセスを保護することを意味することに注意してください。Mutex は 1 つのスレッドによってのみ取得できます。