我在Haskell中寻找共享的并发向量,所以我会接受一个指向高性能解决方案的答案,而不是我在这里讨论的,即将向量库与stm或atomic结合起来-primops。
我有两个线程共享一个可变向量(Data.Vector.Mutable.IOVector
)和一些可以原子方式切换的标志(例如,带有stm的TVar
或带有原子初始值的IORef
。线程1可以在原子地切换标志之前或之后写入向量(非原子地),并且线程2可以在检查标志是否已被切换之前或之后从向量读取。
具体而言,这是一些最小的例子。是否有数据竞争导致他们评估undefined
?
更一般地说,标志上的原子操作的相对顺序是否意味着向量上的操作之间的某些顺序?特别是,我想知道以下是否属实:
对于原子初学者,我特别怀疑使用readIORef
/ readForCAS
,因为文档说it does not imply any barriers。