【发布时间】:2018-02-18 05:00:58
【问题描述】:
我有一个结构,其中包含一个初始化相当昂贵的字段,所以我希望能够懒惰地这样做。但是,这在采用&self 的方法中可能是必需的。该字段还需要能够在初始化后进行修改,但这只会发生在采用&mut self 的方法中。
在 Rust 中正确的(如惯用的,以及线程安全的)方法是什么?在我看来,这两个约束中的任何一个都是微不足道的:
- 如果它只需要延迟初始化而不是变异,我可以简单地使用
lazy-init的Lazy<T>类型。 - 如果它只需要可变而不是惰性,那么我可以只使用普通字段(显然)。
但是,我不太确定如何处理这两个问题。 RwLock 似乎是相关的,但考虑到我所看到的 lazy-init 的源代码,线程安全的延迟初始化似乎有相当大的技巧,所以我犹豫是否基于它推出自己的解决方案。
【问题讨论】:
-
试试
Lazy<RwLock<T>>。
标签: rust synchronization thread-safety lazy-initialization