【问题标题】:splice method type mismatch拼接方法类型不匹配
【发布时间】:2021-06-24 10:56:09
【问题描述】:

所以我有一个布尔向量隐藏在互斥体的弧后面:

let mut vec: Arc<Mutex<Vec<bool>>> = Arc::new(Mutex::new(vec![false; size]));

然后我生成多个线程,这些线程在另一个向量(相同大小)的段上工作。例如,假设size=20。然后,线程 1 处理索引 0 - 4,线程 2 处理索引 5 - 9,依此类推。

每个线程在段上完成它的工作后,我想把它放回这个vecArc/Mutex/Vector。我这样做有点麻烦。这是我迄今为止尝试过的:

let mut vec = next.lock().unwrap(); // Blocks until we can acquire
let mut data = *(& *vec); // Pulls the vector out (type std::vec::Vec<bool>)
data.splice(min..=max, segment.iter().clone()).collect(); // Tries to add our segment in

segment(见最后一行)是在线程中创建的std::vec::Vec&lt;bool&gt;

希望我的意图很明确。

但是,我收到了这个错误:

type mismatch resolving `<std::slice::Iter<'_, bool> as IntoIterator>::Item == bool`

data.splice(min..=max, segment.iter().clone()).collect();
     ^^^^^^ expected reference, found `bool`

note: expected reference `&bool`
found type `bool`

有什么想法吗?

【问题讨论】:

    标签: multithreading rust mutex


    【解决方案1】:

    您不小心用.clone() 克隆了迭代器。您可能打算调用 .cloned() 以便迭代器克隆它的项目。

    data.splice(min..=max, segment.iter().cloned()).collect();
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2016-01-29
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多