内存映射文件C# - 多线程同时创建MMF

时间:2016-08-19 09:14:54

标签: c# multithreading memory-mapped-files

当多个线程同时创建MemoryMappedFile时,我遇到了问题。

MemoryMappedFile memoryMapped = MemoryMappedFile.CreateNew("UNIQUE ID", 
length, MemoryMappedFileAccess.ReadWrite);
MemoryMappedViewAccessor accessor = memoryMapped.CreateViewAccessor();
accessor.SafeMemoryMappedViewHandle.Write(0, length);
accessor.SafeMemoryMappedViewHandle.WriteArray(4, buffer, 0, length); 

并且读取此代码的代码是:

MemoryMappedFile memoryMapped = MemoryMappedFile.CreateOrOpen(args[2], args[3]);
MemoryMappedViewAccessor accessor = memoryMapped.CreateViewAccessor();
int size = accessor.ReadInt32(0);
if (size < 1) {
    return;
}
byte[] buffer = new byte[size];
accessor.SafeMemoryMappedViewHandle.ReadArray(4, buffer, 0, buffer.Length);

有许多进程和多个线程,一个进程中有许多线程写入,多个进程只有1个线程用于读取。这意味着他们可以同时创建和读取内存。

有时会发生访问内存区域进行读取的线程,读取0.只有部分进程实际从内存区域读取数据,其他进程返回大小为0,表示该区域为空。

UNIQUE_ID不应该足以解决这个问题吗?我必须采取哪些步骤才能使多线程工作?

0 个答案:

没有答案