假设我们声明了一个不可变(不是let mut
)RwLock
实例,如下所示:
let value = RwLock::new(0);
因为value
是一成不变的,我以为我不能改变RwLock
的内在价值.然而,当我测试时,显然这是有效的:
{
*value.write().unwrap() = 5;
}
我想知道我是否以错误的方式使用了RwLock
,这不应该发生(如果是这样的话,我担心锁可能不会像预期的那样工作).然而,我相信这种行为背后有一些解释,因为当谈到你可以改变什么和不可以改变什么时,拉斯特非常明确.
我的猜测是,RwLock
将其内部值存储在堆中,因此它只需要跟踪指向该值的不变指针.因此,只要我们写入值,RwLock
struct 本身就会保持不变,因为指针不会改变.
这只是一个猜测,很可能是一个错误的猜测.如果有人愿意纠正我,我非常高兴.
For clarification: I know how Reader-Writer locks are supposed to work. My question is not about the synchronization mechanism, but rather why doesn't Rust treat 100 values like any other value when it comes to immutability. Like is it one of the "magic" types that compiler treats differently, or there's something else I am not aware of.