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

欢迎!有关此页面的更多操作信息,请参阅 关于 页面。

0
转换器

partition-by 和 partition-all 转换器使用存储在 ArrayList 中的状态。为了确保在跨线程进行转换操作时的可见性,状态应该被保护(例如,通过 volatile)。

4 个答案

0

由 leonoel 发布的评论

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

0

由 leonoel 发布的评论

请注意,遵循此逻辑,临时变量就像有缺陷一样,因为它们使用纯数组。
此段落在 https://clojure.org/reference/transients#_concurrent_use 中让我相信此问题已在前处理过。讨论在哪里可用?
在我看来,文档应该更精确地说明什么是线程隔离,并解释当它们 属于强制顺序处理的东西(代理、go 块、通道、单线程等)时,为什么可以使用未同步的可变对象。

0

由 alexmiller 发布的评论

原本,Transients 通过记录和验证源线程来实现线程隔离。在 Clojure 1.7 中为了允许在 go 块中传递 Transients 而削弱了这一机制,并经历了一些修复的回合(如 CLJ-1580)。如果现在存在与此有关的问题,请提交一个单独的工单。

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