小编Rus*_*ofi的帖子

如何在 Rust 的线程之间正确使用 Arc<Mutex<Vec<u8>>> 上的 std::slice::Chunks ?

我想了解为什么以下似乎在 Rust 中无法正常工作。

我想对一个向量进行分块,并给每个线程一个块来处理它。我尝试使用 Arc 和 Mutex 组合来相互访问我的 vec。

这是我的第一次(明显的)尝试:声明 vec,将其分块,将块发送到每个线程中。根据我的理解,它应该有效,因为 Chunk 方法保证不重叠的块。

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let data = Arc::new(Mutex::new(vec![0;20]));
    let chunk_size = 5;
    let mut threads = vec![];
    let chunks: Vec<&mut [u8]> = data.lock().unwrap().chunks_mut(chunk_size).collect();

    for chunk in chunks.into_iter(){
        threads.push(thread::spawn(move || {
                inside_thread(chunk)
            }));
    }

}
fn inside_thread(chunk: &mut [u8]) {
    // now do something with chunk
}
Run Code Online (Sandbox Code Playgroud)

该错误表明数据不够活跃。愚蠢的我,通过分块,我创建了指向数组的指针,但没有将 Arc 引用传递到线程中。所以我改变了几行,但这没有意义,因为我的线程中有一个未使用的引用!?

for i in 0..data.lock().unwrap().len() / 5 {
        let ref_to_data = data.clone();
        threads.push(thread::spawn(move || { …
Run Code Online (Sandbox Code Playgroud)

multithreading mutex reference-counting rust

6
推荐指数
1
解决办法
1015
查看次数

标签 统计

multithreading ×1

mutex ×1

reference-counting ×1

rust ×1