MemoryMappedFile no funciona con 2 procesos?
He hecho una prueba simple con unMemoryMappedFile
como msdn dice
2 procesos, 1 archivo mapeado de memoria:
el primer proceso agrega la cadena "1"el primer proceso esperael segundo proceso agrega la cadena "2" y terminael primer proceso ahora lee todo el archivo mapeado de memoriaproceso A: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, Encoding.UTF8);
writer.Write("1");
}
mutex.ReleaseMutex();
Console.WriteLine("Start Process B and press ENTER to continue.");
Console.ReadLine();
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream, Encoding.UTF8);
Console.WriteLine("Process A says: {0}", reader.ReadString());
Console.WriteLine("Process B says: {0}", reader.ReadString());
}
mutex.ReleaseMutex();
}
proceso B: using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(1, 0))
{
BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8);
writer.Write("2");
}
mutex.ReleaseMutex();
}
El resultado es
Hu?
¿Dónde está "1", "2"?
Sin embargo, si corroSOLAMENT el primer proceso (sin activar el proceso B) obtengo:
Qué me estoy perdiendo
Espero ver:
Process A says: 1
Process B says: 2