【发布时间】:2017-04-28 00:14:58
【问题描述】:
我正在编写一个函数,其中我使用forM_ 处理一个列表,并将结果附加到一个TVar 列表中:
import Control.Concurrent.STM
import Control.Concurrent.STM.TVar
import Control.Concurrent (forkIO)
import Control.Monad (forM_)
insert :: a -> [a] -> [a]
insert = (:) -- stub
my_func_c :: (a -> a) -> [a] -> IO [a]
my_func_c my_function arr = do
res_var <- atomically $ newTVar ([]::[a])
forkIO $ forM_ arr $ \x -> atomically $ do
let y = id $! my_function x
modifyTVar res_var (insert y)
atomically $ readTVar res_var
如果我用-threaded 编译它,结果总是空的。怎么可能等待线程完成?我不能使用MVar 或Async。我必须使用TVar 或其他基于TVar 的数据结构来解决这个问题
【问题讨论】:
标签: multithreading haskell concurrency stm tvar