gpt4 book ai didi

rust - 了解 &* 以访问 Rust Arc

转载 作者:行者123 更新时间:2023-12-03 11:28:13 24 4
gpt4 key购买 nike

https://doc.rust-lang.org/beta/std/sync/struct.Condvar.html 阅读有关 Condvar(Rust 的条件变量)的信息我偶然发现:

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

let pair = Arc::new((Mutex::new(false), Condvar::new()));
let pair2 = pair.clone();

// Inside of our lock, spawn a new thread, and then wait for it to start.
thread::spawn(move|| {
let (lock, cvar) = &*pair2;
let mut started = lock.lock().unwrap();
*started = true;
// We notify the condvar that the value has changed.
cvar.notify_one();
});

// Wait for the thread to start up.
let (lock, cvar) = &*pair;
let mut started = lock.lock().unwrap();
while !*started {
started = cvar.wait(started).unwrap();
}

&*pair2 是什么东西?我认为这与能够从 Arc 中检索对有关,但是有一个简单的 method 来检索的内部对象不是更好吗? Arc 作为引用?

谁能给我解释一下 &* 的作用?

最佳答案

*运算符(operator)转动 Arc<T>进入T . &运营商借用 T进入&T .

所以当我们把它们放在一起时,&*pair借用Arc<T>进入&T .

编写该代码的另一种方式是:

let (lock, cvar) = pair2.deref();

的确,原来&*pair2实际上意味着 &*pair2.deref()*强制编译器插入 .deref()调用,它是执行实际转换的那个方法。

关于rust - 了解 &* 以访问 Rust Arc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62651479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com