gpt4 book ai didi

multithreading - 在这种情况下,我应该如何处理 Clojure 中的可变状态?

转载 作者:行者123 更新时间:2023-12-03 12:52:01 25 4
gpt4 key购买 nike

总的来说,我对 Clojure 和 LISP 还很陌生,所以如果这个问题听起来有点傻,请提前原谅。我最近以 MVC 方式用 Java 创建了一个基于回合的视频游戏,其中一个线程负责图形循环(因此,以固定速率更新屏幕上图形实体的几何状态),另一个线程负责处理游戏的逻辑状态;它的行为非常像一个守护进程:除非被要求做某事(详细的用户输入),否则它在后台“休眠”,然后将“更改日志”传递给图形线程,以便它可以呈现对逻辑状态所做的更改。所以游戏世界根本没有“共享”:只有逻辑线程可以访问它,而图形线程的唯一职责是在初始化阶段之后以及当新的更改日志从逻辑线程到达时将更改应用于渲染.

我读到 Clojure 有 vars、refs 和 atom。在这种情况下,我应该使用这些身份中的哪一个来将我的游戏世界状态存储在 Clojure 的逻辑线程中?

最佳答案

在您的情况下,不需要并发访问,因此任何选项都是有效的。
ref是这个问题的过冲。 var在这种情况下通常不使用(通常 var 重新绑定(bind)用于可配置参数,而不是您案例中的业务逻辑)。所以atom应该没事。

编辑:(详细说明 var)
var , 当声明为 ^:dynamic (通常是 *earmuffed* ),是线程本地的。它可以有一个根绑定(bind),每个线程都可以将它重新绑定(bind)到一个新的线程本地值。 var 的典型用法你可以在 clojure 代码仓库中看到,是 *warn-on-reflection* , *unchecked-math*等等。它们主要以某种方式调整我们代码的行为。

由于您只有一个处理“板”数据的线程,因此可以使用 var无论如何,但这对我来说看起来有点奇怪。看到 var 时我有点不高兴如此频繁地被改变。 :)

关于multithreading - 在这种情况下,我应该如何处理 Clojure 中的可变状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864522/

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