【问题标题】:thread local variables in clojureclojure 中的线程局部变量
【发布时间】:2014-03-03 16:53:21
【问题描述】:
  1. 没有其他原因,我编写了许多其他自定义库,它们在 1.1 上运行。

我需要一种直接的方法来设置线程局部变量,我见过的很多方法都与这个版本的 clojure 不兼容。

在这个examples看到

例如 (thread-local (atom 0)))

(def ^{:dynamic true} 计数器)

似乎不适合我

所以我只需要指出正确的方向。

【问题讨论】:

  • 你试过(def *counter*)吗?如果我记得,带有“耳罩”的符号在早期版本的 clojure 中按照惯例是动态的。
  • 耳罩是一些人用来识别原子变量的约定。
  • 我不明白这个问题。是不是 - (a) 您想永远生活在 4 年前发布的 1.1 版本中,并希望使用您在当前版本中未描述的技术 - 或者 - (b) 您已决定迁移您的代码库到当前版本,并且不知道如何将您未描述的习语转换为在当前版本中工作。
  • 我认为普通变量是线程本地的,除非它们有根绑定
  • 您链接到的答案中的thread-localvemv 答案中使用的构造的更漂亮的clojure 样式包装器。我不清楚链接的答案有什么问题使这个更好,因为它只是在下面使用相同的东西。

标签: java multithreading clojure thread-local thread-local-storage


【解决方案1】:

有这样的课程!

user=> (def local (ThreadLocal.))
#'user/local
user=> (.set local 3)
nil
user=> (.get local)
3

【讨论】:

  • 使用它来设置初始值 3 (def local (proxy [ThreadLocal] [] (initialValue [] 3)))
猜你喜欢
  • 2014-07-16
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多