纯功能性(持久性)环形缓冲区

Purely functional (persistent) ring buffer

我想通过以下操作使用纯功能数据结构实现环形缓冲区

使用持久数据结构的原因是因为我有一个写入器线程和多个 reader 线程,我想避免 reader 阻塞写入器。

这可以通过让 readers 线程仅在拍摄快照时持有锁然后使用快照进行处理来轻松完成。

支持这些操作的现有可用数据结构是什么?

在这种情况下还可以使用哪种其他纯功能数据结构?

finger tree (in the standard library as Data.Sequence) 是持久随机访问序列的首选。我认为它满足你的标准——随机访问索引是 O(log n) (更具体地说,索引与边缘距离的日志),其他是 O(1)。我不知道还有比这更好的持久数据结构。