【发布时间】:2017-10-22 20:44:58
【问题描述】:
在来自Parallel and Concurrent Haskell 的 MVar 日志记录示例中,它显示以下内容:
import Control.Concurrent
import Control.Concurrent.MVar
data Logger = Logger (MVar LogCommand)
data LogCommand = Message String | Stop (MVar ())
initLogger :: IO Logger
initLogger = do
m <- newEmptyMVar
let l = Logger m
forkIO (logger l)
return l
logger :: Logger -> IO ()
logger (Logger m) = loop
where
loop = do
cmd <- takeMVar m
case cmd of
Message msg -> putStrLn msg >> loop
Stop s -> do
putStrLn "logger: stop"
putMVar s ()
logMessage :: Logger -> String -> IO ()
logMessage (Logger m) s = putMVar m (Message s)
logStop :: Logger -> IO ()
logStop (Logger m) = do
s <- newEmptyMVar
putMVar m (Stop s)
takeMVar s
如果删除logger 的最后一行,即putMVar s (),会丢失什么?
【问题讨论】:
-
你试过了吗?
-
没有。谢谢你打电话给我。我应该问一个问题。
标签: haskell