并行处理vec:如何安全地进行操作,或不使用不稳定的功能?

sgldiv

我有一个庞大的向量,希望能够并行加载/操作,例如,在一个线程中加载前十万个索引,在另一个线程中加载下一个,依此类推。由于这将是代码中非常热门的部分,因此我提出了以下以下概念证明不安全的代码,以在没有Arcs和Mutexs的情况下执行此操作:

let mut data:Vec<u32> = vec![1u32, 2, 3];
let head = data.as_mut_ptr();
let mut guards = (0..3).map(|i|
  unsafe {
    let mut target = std::ptr::Unique::new(head.offset(i));
    let guard = spawn(move || {
      std::ptr::write(target.get_mut(), 10 + i as u32);
    });
    guard
  });

我在这里想念的东西有什么可能会使它爆炸吗?

这会用到,#![feature(unique)]所以我看不到如何稳定地使用它。有没有办法稳定地执行这种操作(理想情况下是安全的,而不使用原始指针和Arc's和Mutex's的开销)?

此外,查看有关的文档Unique,它说

这也意味着,如果没有指向引用的唯一路径,则不应修改指针的Unique引用。

我不清楚“独特的道路”是什么意思。

杰克·奥康纳

今天,rayon板条箱已成为这类事情的事实上的标准:

use rayon::prelude::*;

fn main() {
    let mut data = vec![1, 2, 3];
    data.par_iter_mut()
        .enumerate()
        .for_each(|(i, x)| *x = 10 + i as u32);
    assert_eq!(vec![10, 11, 12], data);
}

请注意,这与使用标准迭代器的单线程版本仅有一行不同,后者将替换par_iter_mutiter_mut

另请参阅在Rust和Zig中编写一个小型射线跟踪器

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每晚使用“使用不稳定的库功能'集合'”

来自分类Dev

Rust稳定的标准库是否使用不稳定的功能?

来自分类Dev

如何在脚本化的Jenkinsfile中并行处理不稳定的JUnit结果?

来自分类Dev

如何判断我在使用Debian稳定还是不稳定?

来自分类Dev

如何在git中处理不稳定但必要的文件?

来自分类Dev

Rust书中的stdio示例使用不稳定的库功能'old_io'-存在哪些替代方法?

来自分类Dev

如何使用Openlayers 3的不稳定特性?

来自分类Dev

处理动画非常不稳定

来自分类Dev

为什么在静态使用并行流初始化导致不稳定僵局

来自分类Dev

R tuneRF不稳定,如何优化?

来自分类Dev

R tuneRF不稳定,如何优化?

来自分类Dev

使用AudioQueue播放不稳定的音频

来自分类Dev

使用AudioQueue播放不稳定的音频

来自分类Dev

如何使用TeamCity安全地进行生产发行?

来自分类Dev

Ubuntu为什么使用Debian“不稳定”?那么它如何设法保持稳定呢?

来自分类Dev

对int不稳定?

来自分类Dev

如何在内部与memcpy安全地并行进行for循环

来自分类Dev

使用“从Purrr安全地”调试功能?

来自分类Dev

在默认情况下,如何使用不稳定的存储库并仅在测试中安装软件包(通过AptConf)?

来自分类Dev

如何稳定不稳定的DateTimeFormatter#ofLocalizedDateTime测试?

来自分类Dev

宏功能的有害(或不稳定)结果

来自分类Dev

JavaScript不稳定,具有起点功能

来自分类Dev

Python多处理共享变量不稳定的行为

来自分类Dev

如何使用不同的线程通过openmp安全地更新C结构

来自分类Dev

与MSMQ进行重传:交货时间不稳定

来自分类Dev

对神秘不稳定的机器进行故障排除

来自分类Dev

迅速的sqlite不稳定

来自分类Dev

SKSpriteNode不稳定滑动?

来自分类Dev

硒测试不稳定

Related 相关文章

  1. 1

    每晚使用“使用不稳定的库功能'集合'”

  2. 2

    Rust稳定的标准库是否使用不稳定的功能?

  3. 3

    如何在脚本化的Jenkinsfile中并行处理不稳定的JUnit结果?

  4. 4

    如何判断我在使用Debian稳定还是不稳定?

  5. 5

    如何在git中处理不稳定但必要的文件?

  6. 6

    Rust书中的stdio示例使用不稳定的库功能'old_io'-存在哪些替代方法?

  7. 7

    如何使用Openlayers 3的不稳定特性?

  8. 8

    处理动画非常不稳定

  9. 9

    为什么在静态使用并行流初始化导致不稳定僵局

  10. 10

    R tuneRF不稳定,如何优化?

  11. 11

    R tuneRF不稳定,如何优化?

  12. 12

    使用AudioQueue播放不稳定的音频

  13. 13

    使用AudioQueue播放不稳定的音频

  14. 14

    如何使用TeamCity安全地进行生产发行?

  15. 15

    Ubuntu为什么使用Debian“不稳定”?那么它如何设法保持稳定呢?

  16. 16

    对int不稳定?

  17. 17

    如何在内部与memcpy安全地并行进行for循环

  18. 18

    使用“从Purrr安全地”调试功能?

  19. 19

    在默认情况下,如何使用不稳定的存储库并仅在测试中安装软件包(通过AptConf)?

  20. 20

    如何稳定不稳定的DateTimeFormatter#ofLocalizedDateTime测试?

  21. 21

    宏功能的有害(或不稳定)结果

  22. 22

    JavaScript不稳定,具有起点功能

  23. 23

    Python多处理共享变量不稳定的行为

  24. 24

    如何使用不同的线程通过openmp安全地更新C结构

  25. 25

    与MSMQ进行重传:交货时间不稳定

  26. 26

    对神秘不稳定的机器进行故障排除

  27. 27

    迅速的sqlite不稳定

  28. 28

    SKSpriteNode不稳定滑动?

  29. 29

    硒测试不稳定

热门标签

归档