如何为Vec <f64>使用共享内存?

时间:2019-12-15 21:25:44

标签: linux process rust shared-memory

在Rust中,Vec<f64>是否可以使用共享内存?

程序中的进程在Vec<f64>中交换两个或多个值,我需要在进程之间共享内存。

1 个答案:

答案 0 :(得分:1)

无法安全创建由共享内存支持的Vec。这有两个原因:

  1. Vec拥有其内存,并且在增长时会重新分配它,而在删除时会释放它。当Vec重新分配或超出范围时,不安全地创建指向mmap内存的Vec会破坏堆。

  2. Vec拥有对其内存的独占访问权,例如&mut引用。编译器可以自由地忽略和重新排列读取和写入的顺序,前提是没有其他东西在使用内存。如果这个假设被打破,则行为是不确定的。为了放松这个假设,您的数据类型必须基于UnsafeCell

Vec是此作业的错误指针。尝试使用&[UnsafeCell<f64>]&[AtomicU64](使用from_bitsto_bits进行转换),因为标准库中没有AtomicF64