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這兩個整數