欢迎!请参阅关于页面了解有关此信息的一些更多信息。
partition-by 和 partition-all 转换器使用存储在 ArrayList 中的状态。这个状态应该受到保护(例如,通过 volatile)以确保在用于跨线程执行计算过程的转换过程中可见。
由:leonoel
在此讨论:https://groups.google.com/forum/m/#!topic/clojure/VQj0E9TJWYY
注意,按照这种逻辑,转瞬即逝的东西和它们一样已经破损,因为它们使用普通的数组。这段https://clojure.org/reference/transients#_concurrent_use让我相信,这个问题已经在之前被解决。讨论在哪里可找到?在我看来,文档应该更精确地说明线程隔离的含义,并解释为什么当这些对象被强制进行顺序处理的东西(如代理、go 块、通道、单线程等)所拥有时,可以使用未同步的可变对象。
由:alexmiller
初始时,通过记录和验证源线程来强制实施临时副本线程隔离。在Clojure 1.7中,为了允许在go块之间传递临时副本而削弱了这一措施,并经历了几轮修正(例如CLJ-1580)。如果现在有任何问题,请分别提交一个单独的工单。