c#两个进程間的共享記憶體問題

新手上路,请多包涵

c#两个进程間的共享記憶體問題

// Process A:
static void Main(string[] args)
{
    using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))
    {
        bool mutexCreated;
        Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
        using (MemoryMappedViewStream stream = mmf.CreateViewStream())
        {
            BinaryWriter writer = new BinaryWriter(stream);
            writer.Write(1);
        }
        mutex.ReleaseMutex();

        // Read Int 
        MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
        // For Process B Read
        accessor.Write(499, 41);
        // For Process B Read
        accessor.Write(500, 42);
        // For Process C Read
        accessor.Write(501, 43);
        accessor.Dispose();

        Console.WriteLine("Start Process B and press ENTER to continue.");
        Console.ReadLine();

        Console.WriteLine("Start Process C and press ENTER to continue.");
        Console.ReadLine();

        mutex.WaitOne();
        using (MemoryMappedViewStream stream = mmf.CreateViewStream())
        {
            BinaryReader reader = new BinaryReader(stream);
            MemoryMappedViewAccessor access = mmf.CreateViewAccessor();
            Console.WriteLine("Process A says: {0} ", reader.ReadBoolean());
            Console.WriteLine("Process B says: {0} ", reader.ReadBoolean());
            Console.WriteLine("Process C says: {0} ", reader.ReadBoolean());

            Console.WriteLine("Process A Int:{0}", access.ReadInt32(499));
            Console.WriteLine("Process B Int:{0}", access.ReadInt32(500));
            Console.WriteLine("Process C Int:{0}", access.ReadInt32(501));
            access.Dispose();
        }
        mutex.ReleaseMutex();
        mmf.Dispose();
    }
    Console.Read();
}

以下是结果
Process A says: True
Process B says: False
Process C says: False
Process A Int:2828841
Process B Int:11050
Process C Int:43

為何不是41 42這兩個整數

阅读 1.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进