use std::thread;fn main() { let v = vec![1, 2, 3]; let mut handles = Vec::new(); for i in 0..3 { let separated_vec_clone = &v; handles.push(thread::spawn(move || { let data = separated_vec_clone.get(i).unwrap(); })); } for handle in handles { handle.join().unwrap(); }}
各位老师,上面的代码我希望通过多线程去对vec进行一些操作,但是会得到错误说"v
does not live long enough"。这里我不是很明白,v的生命周期明明是到main函数结束的,并且我尝试使用Arc解决这个错误,依然会有这个错误。能否麻烦大佬说明一下问题在什么地方,谢谢。
首先 Arc 应该是可以解决你的问题的,代码如下
use std::sync::Arc;use std::thread;fn main() { let v = Arc::new(vec![1, 2, 3]); let mut handles = Vec::new(); for i in 0..3 { let separated_vec_clone = Arc::clone(&v); handles.push(thread::spawn(move || { let data = separated_vec_clone[i]; println!("{}", data); })); } for handle in handles { handle.join().unwrap(); }}
关键在于使用 clone 而不是 borrow(借用)。
然后解释一下你说的 v 生命周期是到 main 结束的地方。我的理解是 rust 编译器应该没法推导(保证) v 在外面能活多久。
我想写一个模拟 DNF 装备增幅的程序,通过多次样本执行得到平均每件增幅 10 装备需要增幅多少次。装备 +4 之前不会失败,+4 之后会失败且失败后还会掉级,具体如下图所示: 公会秘药和普雷宠物会额外增加每次增幅的成功率 1% 和 4%,所以一共分了三种情况。 我最开始用 js 写了一版: 后来想到我刚学了 rust,不如练练手,而且 rust 很快,于是又写了一版: 然而实际上 rust 代码
我们知道,Node.js 不适合 CPU 密集型计算的场景,通常的解决方法是用 C/C++ 编写 Node.js 的扩展(Addons)。以前只能用 C/C++,现在我们有了新的选择——Rust。 3.5.1 环境 node@8.9.4 rust@1.26.0-nightly 3.5.2 Rust Rust 是 Mozilla 开发的注重安全、性能和并发的现代编程语言。相比较于其他常见的编程语言,
请大佬帮忙把一段之前golang实现的并发读写代码用rust实现
大概功能就是计算一个数组内的元素的和,怎么约束 T 让这段程序编译通过
实现Run 实现Flock 前面提到进程的文件锁,实际上Run也用到了,可以试想下以下的场景。 用户A执行run pt-summary,由于本地已经缓存了所以会直接运行本地的脚本。同时用户B执行run -u pt-summary,加上-u或者--update参数后Run会从远端下载并运行最新的脚本。如果不加文件锁的话,用户A的行为就不可预测了,而文件锁很好得解决了这个问题。 具体使用方法如下,我们
#coding=utf-8 ''''' ''' from math import log import operator def createDataSet(): dataSet =[[1,1,'yes'], [1,1,'yes'], [1,0,'no'], [0,1