ond*_*dra 8 haskell memory-leaks
我正在编写一个多线程程序,它充分利用了mvars; 在这种情况下,我有一个线程,周期性地更改mvar内的列表.不幸的是,有一个thunk内存泄漏.似乎有一种问题是'map id'(在实际程序中我使用的不是id的东西)函数泄漏.我只是找不到如何避免这种情况的方法 - 我正在使用'seq'而没有结果.什么是修复泄漏的正确方法?
upgraderThread :: MVar [ChannelInfo] -> IO ()
upgraderThread chanMVar = forever job
where
job = do
threadDelay 1000
vlist <- takeMVar chanMVar
let reslist = map id vlist
putMVar chanMVar reslist
Run Code Online (Sandbox Code Playgroud)
经过几次尝试,这个似乎有效:
upgraderThread chanMVar = forever job
where
job = do
threadDelay 1000
vlist <- takeMVar chanMVar
let !reslist = strictList $ map id vlist
putMVar chanMVar reslist
strictList xs = if all p xs then xs else []
where p x = x `seq` True
Run Code Online (Sandbox Code Playgroud)