-->

到内存的64位块原子解锁访问映射文件在.NET(Atomic unlocked access to

2019-10-20 04:12发布

我们需要共享非常有效的两个进程之间不断变化的信息块。 在内存64位块信息适合 - 这样一个过程里面我们就可以使用互锁操作(或者甚至可能只是普通的读/写),以确保无锁进入正确的信息状态(而不仅仅是只写了一部分)。

我们怎样才能写,没有同步,以确保我们不读部分写入的数据锁定和数据的64位到MMF的准备块? 不是原子在64位架构的这种规模的写入本身? 但是,对准很可能使非原子,是否正确?

因此,使用互锁操作(通过在这个问题上所描述的方式如: 如何使用对内存映射文件互锁操作在.net中 )在MMF的路要走? 但是,我们不能把与在这种情况下,即使对准的问题(如MMF是内存块,因此.NET可能无法控制它的对齐,因为它与变量一样)?

Answer 1:

我们怎样才能写,没有同步,以确保我们不读部分写入的数据锁定和数据的64位到MMF的准备块? 不是原子在64位架构的这种规模的写入本身? 但是,对准很可能使非原子,是否正确?

内存映射文件是在幕后页对齐的,所以在你的MMF排列数据。 然后,如果你写一个64位处理器,64位指令64位对齐的位置的64位整数,应该没有其他处理器读取该位置处部分写入数值的机会。

[编辑]参见文章管理内存映射文件(MSDN)描述一个实现的MMF文件作为系统的页面文件。 另请参阅本维基作为MMF一般信息其中规定货币市场基金始终是页对齐。

因此,使用互锁操作(通过“引”问题描述的方式如:如何使用对内存映射文件互锁操作在.NET)的方式对MMF去? 但是,我们不能把与在这种情况下,即使对准的问题(如MMF是内存块,因此.NET可能无法控制它的对齐,因为它与变量一样)?

不应该有跟你举的例子任何对齐问题。



文章来源: Atomic unlocked access to 64bit blocks of Memory Mapped Files in .NET