多数のクライアント アプリケーションが .Net リモート処理を使用して接続するプロキシ プロセスがあります。参照カウント方式を使用して、このプロキシの存在を管理したいと思います。これを行うには、次のようなキーと値 (string-int) のペアを格納する小さなメモリ マップ ファイルを使用すると考えました。
ref_count 2
ただし、ref_count 値を時々更新したいのですが、そうするのに問題があります。これが私のコードです:
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;
class Program
{
static void Main(string[] args)
{
using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 100))
{
bool mutexCreated;
Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write("count:");
writer.Write(3);
}
mutex.ReleaseMutex();
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
BinaryWriter writer = new BinaryWriter(stream);
Console.WriteLine("String value is: {0}", reader.ReadString());
Console.WriteLine("UInt32 value is: {0}", reader.ReadUInt32());
// Update mmf data
writer.Write("count:");
writer.Write(30);
// empty string where "count" was expected
Console.WriteLine("String value is: {0}", reader.ReadString());
// 0 where 30 was expected
Console.WriteLine("UInt32 value is: {0}", reader.ReadUInt32());
}
mutex.ReleaseMutex();
}
}
}
それで、私の質問は、参照カウントを更新する最良の方法は何ですか?また、上記のコード例で2番目の書き込みが機能しないのはなぜですか?
ありがとう、