要绕过闭包借用变量生命周期限制,可以使用Arc
(原子引用计数)和Mutex
(互斥锁)来共享变量。
代码示例:
use std::sync::{Arc, Mutex};
fn main() {
let counter = Arc::new(Mutex::new(0));
let handles: Vec<_> = (0..10).map(|_| {
let counter = Arc::clone(&counter);
std::thread::spawn(move || {
let mut num = counter.lock().unwrap();
*num += 1;
})
}).collect();
for handle in handles {
handle.join().unwrap();
}
println!("Result: {}", *counter.lock().unwrap());
}
在上面的示例中,我们使用Arc
包装了一个Mutex
,以便可以在多个线程之间共享计数器变量counter
。Mutex
用于确保同时只有一个线程可以访问计数器。
在map
函数中,我们使用Arc::clone
创建一个counter
的引用,然后将其移动到新线程的闭包中。这样每个线程都有一个独立的计数器引用。
在闭包中,我们首先对counter
执行lock
操作,以获取一个可变的引用。然后我们可以对计数器进行自增操作。
在主线程中,我们等待所有线程的执行完成,然后使用counter.lock().unwrap()
获取计数器的最终值,并打印出来。