我目前正在使用Rust实现我的第一个库,和许多其他从Java等语言转换过来的开发人员一样,我在寻找Rust中常见模式/用例的正确解决方案方面遇到了困难。
我的Rust库有多个结构体。其中许多需要访问一些对它们的功能至关重要的共同配置选项。例如:
当结构体初始化时,上下文将被传递给每个结构体一次。上下文属性值可能会在运行时更改,这应该使这些更改对任何依赖的结构体可用。如果需要,结构体应该能够更改上下文。将来可能需要将上下文提供给不同的线程。
到目前为止,我找到的最好的解决方案是使用Mutex包装在Arc中,如此处所述。
我想知道这是否是实现我的要求的正确方法,还有其他可用选项?
我的Rust库有多个结构体。其中许多需要访问一些对它们的功能至关重要的共同配置选项。例如:
pub struct A {
pub context: Context
}
pub struct B {
pub context: Context
}
pub struct Context {
pub dbUri: String
}
当结构体初始化时,上下文将被传递给每个结构体一次。上下文属性值可能会在运行时更改,这应该使这些更改对任何依赖的结构体可用。如果需要,结构体应该能够更改上下文。将来可能需要将上下文提供给不同的线程。
到目前为止,我找到的最好的解决方案是使用Mutex包装在Arc中,如此处所述。
我想知道这是否是实现我的要求的正确方法,还有其他可用选项?
Arc<Mutex<Context>>
似乎可以解决你的问题,所以我不太清楚你在寻找什么。 - Sven MarnachRc<RefCell>
。如果您关心性能(或者不需要毒化功能),请考虑使用parking_lot
中的Mutex。 - user4815162342