mvarsをかなり使用するマルチスレッドプログラムを作成しています。この場合、私は定期的にmvar内のリストを変更するスレッドを持っています。残念ながら、サンクのメモリリークがあります。 '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
'strictList'で使用しているパターンは' deepseq'によって一般化されています。 http://hackage.haskell.org/packages/archive/deepseq/latest/doc/html/Control-DeepSeq.htmlを参照してください。 – acfoltzer