又碰到不会写的代码了。请大佬教我,万分感谢。 这种情况我怎么应对。我要在线程里调用 mut a 的 stop 方法来结束 a.start 中的 loop。
#![allow(unused)]
struct A {
stop: bool,
val: i32,
}
impl A {
pub fn new() -> Self {
A {
stop: false,
val: 1,
}
}
pub fn stop(&mut self) {
self.stop = true;
}
pub fn start(&mut self) {
loop {
if self.stop {
break;
}
println!("loop...{}", self.val);
self.val += 1;
std::thread::sleep(std::time::Duration::from_millis(1000));
}
}
}
struct B {}
impl B {
pub fn new() -> Self {
B {}
}
pub fn stop<F: ?Sized>(&self, callback: &F) where F: Fn() {
println!("callback");
callback();
}
}
fn main() {
let mut a = A::new();
let b = B::new();
std::thread::spawn(move || {
b.stop(&||{
a.stop();
});
});
a.start();
}
play: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9a5bbac1008e976a5f3da5d43c5f506e
1
共 7 条评论, 1 页
评论区
写评论好的。谢谢
--
👇
Pikachu: mutex
另外建议把the book认真看一遍。第16章fearless concurrency就专门讲的如何写多线程。
谢谢你。我开始也是用Arc::new(Mutex::new(a)) 把整个 struct 的实例包起来,发现不行。确实没想到可以包里面的属性。非常感谢
--
👇
night-cruise: 用 Mutex 干就完事了:
是的,我的疏忽,忘记点 share,就直接复制了链接。已更新。
--
👇
bestgopher: 你这个链接有啥用
用 Mutex 干就完事了:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d814ccd7ba07a1094fcfdbced2c403e5
mutex
另外建议把the book认真看一遍。第16章fearless concurrency就专门讲的如何写多线程。
你这个链接有啥用