想修改 Mutex 封装的变量,尝试了好多方法都不能直接修改,于是想到把数据封装成 struct,利用专门的方法来修改。代码如下
use std::sync::Mutex;
#[derive(Debug)]
struct Data {
item: i32,
}
impl Data {
fn set(&mut self, n: i32) {
self.item = n;
}
}
fn main() {
let data = Data { item: 123 };
let x = Mutex::new(data);
println!("{:?}", x);
{
let mut y = x.lock().unwrap();
y.set(456);
}
println!("{:?}", x);
}
===================================
Mutex { data: Data { item: 123 }, poisoned: false, .. }
Mutex { data: Data { item: 456 }, poisoned: false, .. }
把申请锁和修改变量的代码放到了一对单独的 {...}
大括号中,是因为想利用 y 的生命周期实现自动释放锁。
这个例子很简短,但说明了如何去修改 Mutex 包装的变量。能不能直接修改变量?我又做了如下实验,结果还真的成功了。
use std::sync::Mutex;
fn main() {
let x = Mutex::new(123);
println!("{:?}", x);
{
let mut y = x.lock().unwrap();
*y = 456;
}
println!("{:?}", x);
}
=============================
Mutex { data: 123, poisoned: false, .. }
Mutex { data: 456, poisoned: false, .. }
这次代码简单的我都不好意思了!