作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 rust 初学者。
我认为所有权方面存在一些问题。我想做的是更改 bool 值的“ret”
池块中的type变量。但是,当我运行代码并检查ret时,它在pool块内变化良好,而在块外,ret始终表现为true ,,,
请解决我的头痛...
let mut pool = Pool::new(max_worker);
let mut ret = true;
pool.scoped(|scoped| {
for i in 0..somevalue{
scoped.execute( move || {
let ret_ref = &mut ret;
// Do Something
if success {
*ret_ref = false
}
});
}
});
if ret == true { /* Do Something */ }
最佳答案
scoped_threadpool::Pool::scoped(&mut self, <closure>)
返回一个表示 FnOnce
的闭包,这意味着您只能调用一次。您将其包含在for
循环中,这就是为什么编译器不断给您带来错误以及令人困惑的建议的原因。重构代码以将for
移到调用之外的scoped
时,它将编译并按预期工作:
use scoped_threadpool::Pool;
fn main() {
let max_workers = 1;
let somevalue = 1;
let mut pool = Pool::new(max_workers);
let mut ret = true;
let ret_ref = &mut ret;
for i in 0..somevalue {
pool.scoped(|scoped| {
scoped.execute(|| {
// do something
let success = true;
if success {
*ret_ref = false
}
});
});
}
if ret == true {
println!("ret stayed true");
} else {
// prints this
println!("ret was changed to false in the scoped thread");
}
}
playground
关于multithreading - 除scoped_threshhold外的Rust处理变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65916854/
我是一名优秀的程序员,十分优秀!