【发布时间】: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<bool>。
希望我的意图很明确。
但是,我收到了这个错误:
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