Multithreading 具有数据映射操作的线程安全数据结构

Multithreading 具有数据映射操作的线程安全数据结构,multithreading,haskell,concurrency,Multithreading,Haskell,Concurrency,我正在寻找具有类似于data.Map接口的线程安全数据结构,即支持快速插入,查找,删除操作。所谓“线程安全”,我的意思是这些操作是原子/线性化的。我知道我可以用 data MyThreadSafeDS k a = MyThreadSafeDS (TVar (Map k a)) 但基准测试表明,当多个线程试图同时执行插入/删除操作时,这种方法的性能非常差。有趣的是,在这种情况下,使用MVar会产生更糟糕的结果 背景:我已经写了一篇文章,我正在寻找其他线程安全的数据结构来包含在我的基准测试结果中。

我正在寻找具有类似于
data.Map
接口的线程安全数据结构,即支持快速
插入
查找
删除
操作。所谓“线程安全”,我的意思是这些操作是原子/线性化的。我知道我可以用

data MyThreadSafeDS k a = MyThreadSafeDS (TVar (Map k a))
但基准测试表明,当多个线程试图同时执行插入/删除操作时,这种方法的性能非常差。有趣的是,在这种情况下,使用
MVar
会产生更糟糕的结果


背景:我已经写了一篇文章,我正在寻找其他线程安全的数据结构来包含在我的基准测试结果中。我知道,这似乎不是线程安全的

这个问题让我有点困惑<代码>数据.Map是一个纯粹的功能结构,因此总是线程安全的,不是吗?好的,纯功能性的
insert
等没有破坏性的那么快,但这与线程安全性是正交的。我想你真正想问的是,“什么是比
Data.Map
更快但仍然是线程安全的关联容器”@leftaroundabout澄清一下:我的意思是多个线程可以访问并观察彼此修改的结果的数据结构。纯数据结构在设计上是不可变的,因此线程A的
insert
不可能在以后被线程B的
lookup
看到,这仅仅是因为
insert
生成了一个新的
data.Map
,而线程B仍然拥有原始的。