gpt4 book ai didi

multithreading - 除scoped_threshhold外的Rust处理变量

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

从 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/

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