小编day*_*ily的帖子

Haskell 数据结构具有 O(1) 索引/更新和 O(logn) 缺点

目前我需要一个不可变的数据结构(由 索引Int),它具有快速读取和更新(基本上,有效地 O(1)),但稍微慢一些的缺点(例如 O(logn))是可以接受的。不需要其他操作。我现在拥有的是:

  • Data.IntMap这是一棵基数树。它对于所有事情都有渐近 O(1),是目前最好的选择。
  • Data.Sequence这是一棵手指树。它的最坏情况是 O(logn) 查找/更新,但缺点是 O(1)。这不太符合我的需求,并且IntMap在我的微基准测试中确实比 s 表现更差。
  • Data.HashMap对于所有事情都有 O(logn) 且性能比 更差IntMap

我的问题是:是否有任何 Haskell 数据结构可以比IntMap这方面表现更好?

haskell immutability time-complexity data-structures

5
推荐指数
0
解决办法
338
查看次数

“Data.Unique”何时是线程安全的?

的内部实现Data.Unique 用作IORef存储下一个唯一整数的计数器

据我所知,IORefs 并不完全是线程安全的。特别是,在这种情况下,我们需要自动取出数据并为其加一。如果它不是原子的,我们最终可能会在更新计数器之前读取两个相同的数字。

我知道newUniqueuse的实现只有在整个程序中使用时才atomicModifyIORef被认为是原子的。IORef

因此,我可以推断,如果我在程序中Unique不使用任何 s,那将是线程安全的。IORef问题是:当我使用另一个时会发生什么IORef?行为如何会出现问题?或者只有当我尝试atomicModifyIORef在其他IORef设备上使用时才会出现问题?

multithreading haskell thread-safety

3
推荐指数
1
解决办法
88
查看次数