クラスをデザインしましたMemoryBlock
。名前が示すように、それは(管理されていない)メモリのブロックです。私は単にそうするだけでvar x = new MemoryBlock (1024, 16)
、1kBのメモリ(16バイトにアラインされます)が得られます。そのため、一部のスレッドは、安全でないコンテキストを使用してこのブロックに対して読み取り/書き込みを行います。SyncRoot
スレッドを同期するためにプロパティのようなことをしました。だから私はlock (myMemoryBlock.SyncRoot)
記憶を使っていくつかのことをします。良いか悪いかはわかりませんが、このようなものをコレクションで見ました。
この単純なメカニズムでは、複数のスレッドがこのオブジェクトにアクセスすることはできません。書くことはできますが、読むには十分ではありません。私はこのようなものが欲しい:
1)スレッドがオブジェクトに書き込んでいる場合、他のスレッドはこのオブジェクトにアクセスできません
2)スレッドがオブジェクトから読み取っている場合、他の多くのスレッドはこのオブジェクトから読み取ることができますが、書き込むことはできません
3)オブジェクトが使用され、スレッドが書き込みを希望する場合、スレッドはオブジェクトが解放されるまで待機します
4)エキスパートモード:一部のスレッドがオブジェクトから読み取りを行っており、別のスレッドがオブジェクトに書き込みを行う場合、オブジェクトが解放されるまで待機しますが、オブジェクトに停止を指示して、読み取りたい新しいスレッドにアクセスできるようにしますこのオブジェクト(キュー)から。
コードを必要とせず、簡単なヒントをいただければ幸いです。