相关疑难解决方法(0)

克隆Arc时会发生什么?

我正在学习并发性,并希望澄清我对Rust书中以下代码示例的理解.如果我错了,请纠正我.

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

fn main() {
    let data = Arc::new(Mutex::new(vec![1, 2, 3]));

    for i in 0..3 {
        let data = data.clone();
        thread::spawn(move || {
            let mut data = data.lock().unwrap();
            data[0] += i;
        });
    }

    thread::sleep(Duration::from_millis(50));
}
Run Code Online (Sandbox Code Playgroud)

线路上发生了let data = data.clone()什么?

Rust书说

我们clone()用来创建一个新拥有的句柄.然后将此句柄移动到新线程中.

什么是新的"拥有的手柄"?这听起来像是对数据的引用?

由于clonea &self和a 返回一个Self,是每个线程修改原始数据而不是副本?我猜这就是为什么代码没有使用data.copy()data.clone()在这里.

data右侧是一个参考,而data左边是一个拥有价值.这里有一个变量阴影.

concurrency clone rust

21
推荐指数
3
解决办法
845
查看次数

为什么std :: rc :: Rc <>不能复制?

有人可以向我解释为什么Rc<>不是Copy吗?

我正在编写使用大量共享指针的代码,并且不得不一直打字,.clone()这让我很紧张.

在我看来,Rc<>应该只是一个指针,这是一个固定的大小,所以类型本身应该是Sized,因此Copy,对吗?

我错过了什么吗?

smart-pointers rust

19
推荐指数
2
解决办法
1895
查看次数

标签 统计

rust ×2

clone ×1

concurrency ×1

smart-pointers ×1