有谁知道在Haskell中是否可以进行无锁编程?我对于是否有适当的低级基元是否可用以及(如果有的话)关于在纯函数上下文中使用这些基元来构建工作大规模系统的任何信息感兴趣.(我以前从未在纯函数上下文中完成无锁编程.)例如,据我所知,Control.Concurrent.Chan通道是建立在MVars之上的,据我所知,它使用了锁 - - 原则上可以构建Chan原语的版本,这些版本在内部是无锁的吗?希望获得多少性能提升?
我也shoudl说,我熟悉TVars的存在,但并不了解其内部实现---我一直在考虑要明白,他们大多是无锁的,但我不知道,如果他们完全锁定免费.所以关于TVars内部实现的任何信息也会有所帮助!
(这个帖子提供了一些讨论,但我想知道是否有更新更新/更全面.)
MVar不仅使用锁,而且是锁抽象.而且,我记得,单个STM原语是乐观的,但在STM实现中的各个地方都使用了锁.只要记住方便的押韵:"如果它能阻挡,那就要小心锁".
对于真正的无锁编程,您希望直接使用IORefs atomicModifyIORef
.
编辑:关于黑洞,我记得实施是无锁,但我不能保证细节.该机制在"运行时支持多核Haskell"中有所描述:http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/multicore-ghc.pdf
但是我认为,这个实现经历了一些调整,如Simon Marlow的2010年Haskell实施者研讨会演讲"调度多核的懒惰评估"中所述:http://haskell.org/haskellwiki/HaskellImplementorsWorkshop/2010.不幸的是,这些幻灯片已脱机,但视频仍应有效.