gpt4 book ai didi

multithreading - Haskell:TMVar 与 MVar

转载 作者:行者123 更新时间:2023-12-03 12:45:26 25 4
gpt4 key购买 nike

我想要一个小操作,其中一个线程向共享状态添加一些值,而另一个线程取出该值并打印它。这是分别使用 TMVar 和 MVar 的两个版本。 TMVar 版本无法正常工作,它不断打印出第一个值。 STM第一个版本有什么问题?如何修复第一个 TMVar 版本以使其工作?

import Control.Concurrent (forkIO, takeMVar,newEmptyMVar,putMVar)
import Control.Monad (forM_, replicateM_)
import Control.Concurrent.STM (atomically, readTMVar, putTMVar, newEmptyTMVarIO)

n=10

main = do

mvar<- newEmptyTMVarIO

forkIO $ do
forM_ [1..n] $ \x-> atomically $ do
putTMVar mvar $! x

replicateM_ n $ do
a<- atomically $ readTMVar mvar
print $ show a


main2 = do

mvar<- newEmptyMVar

forkIO $ do
mapM_ (\x-> putMVar mvar x) [1..n]

replicateM_ n $ do
a<- takeMVar mvar
print $ show a

最佳答案

您正在使用 readTMVar ,它只查看 TMVar 中的内容.我想你的意思是使用 takeTMVar让另一个线程有机会在其中添加新内容。

关于multithreading - Haskell:TMVar 与 MVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63716645/

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