2024 Clojure 状态调查中分享您的想法!

欢迎!请参阅关于页面了解有关此信息的一些更多信息。

0
转换器

partition-by 和 partition-all 转换器使用存储在 ArrayList 中的状态。这个状态应该受到保护(例如,通过 volatile)以确保在用于跨线程执行计算过程的转换过程中可见。

4 个答案

0
0

由:leonoel

注意,按照这种逻辑,转瞬即逝的东西和它们一样已经破损,因为它们使用普通的数组。
这段https://clojure.org/reference/transients#_concurrent_use让我相信,这个问题已经在之前被解决。讨论在哪里可找到?
在我看来,文档应该更精确地说明线程隔离的含义,并解释为什么当这些对象被强制进行顺序处理的东西(如代理、go 块、通道、单线程等)所拥有时,可以使用未同步的可变对象。

0

由:alexmiller

初始时,通过记录和验证源线程来强制实施临时副本线程隔离。在Clojure 1.7中,为了允许在go块之间传递临时副本而削弱了这一措施,并经历了几轮修正(例如CLJ-1580)。如果现在有任何问题,请分别提交一个单独的工单。

0
by
参考: https://clojure.atlassian.net/browse/CLJ-2146(由alexmiller报告)
...