gpt4 book ai didi

rust - 我是否需要使用某种内部可变性来创建两个Arc之间的循环?

转载 作者:行者123 更新时间:2023-11-29 08:12:00 24 4
gpt4 key购买 nike

我有一棵树,我希望树的每个节点都有一个指向其父节点的指针。

struct DataDeclaration {
parent: Option<Arc<DataDeclaration>>,
children: Option<Vec<Weak<DataDeclaration>>>,
properties: HashMap<Identifier, DataDeclarationProperty>,
}

这会产生一个循环,所以我使用 Weak 来确保内存不会无限期地存在。这棵树在我的应用程序的整个长度内都是不可变的,当然,在构建树时除外。

为了创建这棵树,我需要使用标准库中的 MutexRwLock 还是 parking_lot ?如果我只将锁用于读取,是否会对性能产生负面影响?

最佳答案

do I need to use a Mutex or RwLock

是的。

没有实际的方法可以让类型在构造时暂时可变,然后在一段时间内“放弃”可变的能力(直到需要再次变为可变时销毁)

Will there be a negative performance impact

是的。

影响是否有意义或重要?这取决于整个程序范围之外无法回答的一大堆因素和一组特定的用法。

如果您使用 Mutex 而不是 RwLock,影响可能会更大,因为 Mutex 一次只允许一个线程访问. RwLock 将允许多个并发线程。

另见:


此处的所有内容对于单线程上下文也适用,将 Arc 替换为 Rc 并将 RwLock 替换为 RefCell .

关于rust - 我是否需要使用某种内部可变性来创建两个Arc之间的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56709610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com