相关疑难解决方法(0)

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

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

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

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

我错过了什么吗?

smart-pointers rust

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

我何时或为什么要在RwLock上使用Mutex?

当我读到的单证MutexRwLock,我看到区别如下:

  • Mutex 一次只能有一个读者或作者,
  • RwLock 一次可以有一个作家或多个读者.

当你这样说的时候,RwLock似乎总是更好(更少限制)Mutex,为什么我会使用它呢?

multithreading mutex readwritelock rust

13
推荐指数
2
解决办法
1633
查看次数

“预期的结构`std::rc::Rc`,找到参考” - 如何转换?

我试图Rc<Foo>从哈希映射中获取引用计数并将其放入不同的容器 ( Vec<Foo>) 中。

认为这会起作用(通过增加引用计数),但我得到了一个“预期的结构std::rc::Rc,找到了引用”错误。

如何将 an 转换&Rc<Foo>为 a Rc<Foo>


更多信息:

struct Foo();
let mut foo : HashMap<usize, Rc<Foo>> = HashMap::new();
let mut bar : Vec<Rc<Foo>> = Vec::new();
foo.insert(0, Rc::new(Foo()));
if let Some(x) = foo.get(&0) {
    bar.push(x); // expected struct `std::rc::Rc`, found reference
                 // note: expected type `std::rc::Rc<Foo>`
                 //          found type `&std::rc::Rc<Foo>`  rustc(E0308)
}
Run Code Online (Sandbox Code Playgroud)

我知道哈希映射返回对其拥有的值的引用。但是提领它不工作:既if let Some(&x)bar.push(*x);导致“无法动弹借来的内容了”

奇怪的是,添加类型注释会将错误更改为“无法移出Rc: …

rust

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

在线程之间可变地共享i32

我是Rust和线程的新手,我正在尝试打印一个数字,同时在另一个线程中添加它.我怎么能做到这一点?

use std::thread;
use std::time::Duration;

fn main() {
    let mut num = 5;
    thread::spawn(move || {
        loop {
            num += 1;
            thread::sleep(Duration::from_secs(10));
        }
    });
    output(num);
}

fn output(num: i32) {
    loop {
        println!("{:?}", num);
        thread::sleep(Duration::from_secs(5));
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用:它总是打印5,好像数字永远不会增加.

multithreading rust

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