【发布时间】:2023-02-04 04:57:25
【问题描述】:
我有一个正在尝试编码的游戏,我想记住一个 next_guess 函数,因为它很昂贵。我知道有一些记忆箱,但我有一些奇怪的要求,整个项目都是学习 Rust 的练习,所以我想知道真正的 Rustacean 会怎么想。 next_guess函数在Node struct的impl中。游戏树的分支非常快,所以每个级别都有几十个可能的下一步节点来分析。如果我将对 memoize HashMap 的引用添加到 Node struct 以供 next_guess 使用,我不能使其可变,因为不能有多个对它的可变引用。但我需要它是可变的,这样我才能添加新的值。我认为使用全局变量是一个禁忌,但是将 HashMap 设置为 lazy_static 是正确的方法,还是我应该使用 unsafe 块来访问它(我可以这样做吗?)。谢谢
【问题讨论】:
-
访问
HashMap是多线程的吗?如果不是,您可以将它放在RefCell中,以便它可以在共享引用后面发生变异?否则,也许您可以将它放在Mutex或RwLock中,以便同步跨线程的访问(并且,同样,共享引用后面可能会发生突变);但是存在更有效的解决方案,包括parking_lot。
标签: rust memoization