2024 年 Clojure 状态调查 中分享您的观点!

欢迎!请参阅 关于 页面以了解更多信息如何使用本站。

0
转换器

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

4 个答案

0

评论由:leonoel 提出

在此讨论: https://groups.google.com/forum/m/#!topic/clojure/VQj0E9TJWYY

0

评论由:leonoel 提出

注意,按照这个逻辑,transients 也有同样的问题,因为它们使用原生数组。
此段落 https://clojure.org/reference/transients#_concurrent_use 使我相信这个问题之前已经解决。讨论在哪里可以进行?
在我看来,文档应该更确切地说明线程隔离的含义,并解释为什么当它们由强制顺序处理的某物(代理、go 块、通道、单线程等)拥有时,可以使用未同步的可变对象。

0
by

评论由:alexmiller发布

Transients最初通过记录和验证触发线程来实现线程隔离。在Clojure 1.7中,为了允许在go块之间传递transients而削弱了这一点,并经过了一些修复轮次(例如CLJ-1580)。如果有关于它们的问题,请提交一个单独的工单。

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