当多个线程同时创建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不应该足以解决这个问题吗?我必须采取哪些步骤才能使多线程工作?