有什么方法可以手动指示MutableArray的元素#对GC安全吗?

时间:2014-04-01 23:03:36

标签: haskell garbage-collection ghc

在我的应用程序中,我正在使用跨线程共享的MutableArray s(通过primitive包)。我知道什么时候不再使用单个元素,我想某种方式(unsafeMarkGarbage或者其他东西)向运行时指示它们可以被收集。如果存在这样的函数或等效技术,至少我想试验一下。

编辑,添加更多细节:我有一个概念性的“无限磁带”实现为短MutableArray段的链接列表,如:

data Seg a = Seg (MutableArray a) (IORef (Maybe (Seg a)))

我使用并发计数器访问磁带,并始终知道何时不再访问磁带的元素。在某些情况下,当一个线程被取消调度时,可能已经GC的整个数组段(数组及其元素)都会被粘住,因为它们的引用将会持续存在。

理想的解决方案是避免额外的写入(可能是愚蠢的),避免数组中的另一层间接,并允许在所有元素到期时收集整个MutableArray

Weak引用似乎是我见过的最有前途的机制,但我还不知道他们如何在这里帮助我。

1 个答案:

答案 0 :(得分:3)

我建议您将undefined存储在您想要垃圾回收的位置。