gpt4 book ai didi

haskell - writeTVar 的不安全版本

转载 作者:行者123 更新时间:2023-12-02 17:02:08 25 4
gpt4 key购买 nike

我正在使用由多个线程访问的 TVar 列表。但是,我的代码中有一个性能关键部分,内容如下:

 sequence [ atomically $ writeTVar tvar1 someValue | tvar1 <- listOfTVars ]

可以保证,在执行此代码时,没有其他线程会访问 listOfTVars 中的任何TVar > 直到sequence完成,既不通过读取也不通过写入。

GHC 是否公开了任何允许我“不安全”执行这些值更新的原语? 我的目标是更快地完成此操作,而无需经历为每个人提交事务的 STM 开销。换句话说,我不需要 STM 为 writeTVar 提供的原子性;相反,我只需要一种快速的方法来更新存储在 TVar 中的值。

最佳答案

环顾四周,我没有看到任何暴露的基元。

文档说您可以将 unsafePerformIOatomically 一起使用,但警告说它可能会破坏它提供的一些保证:Control.Monad.STM.atomically 。显然,unsafeDupablePerformIO 的性能比 unsafePerformIO 更好,但有更多警告。如果性能至关重要,则值得进行基准测试,看看它们是否提供任何性能优势。

import Control.Concurrent.STM.TVar
import Control.Monad.STM
import Control.Monad
import System.IO.Unsafe

t1 <- newTVarIO "Hello"
t2 <- newTVarIO "Goodbye"
unsafeDupablePerformIO $ sequence $ (\t -> atomically $ writeTVar t "Hola") <$> [t1,t2]
unsafeDupablePerformIO $ sequence $ (putStrLn <=< readTVarIO) <$> [t1,t2]

关于haskell - writeTVar 的不安全版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com