Tôi đang viết một chương trình đa luồng, sử dụng khá nhiều mvars; trong trường hợp này, tôi có một chuỗi định kỳ thay đổi danh sách bên trong một mvar. Thật không may, có một rò rỉ bộ nhớ thunk. Có vẻ như là một vấn đề mà các 'id bản đồ' (trong chương trình thực sự tôi sử dụng một cái gì đó khác hơn là id) rò rỉ chức năng. Tôi chỉ không thể tìm ra cách để tránh điều đó - tôi đã chơi với 'seq' mà không có kết quả. Cách khắc phục rò rỉ đúng cách là gì?Rò rỉ bộ nhớ rác do chức năng bản đồ
upgraderThread :: MVar [ChannelInfo] -> IO()
upgraderThread chanMVar = forever job
where
job = do
threadDelay 1000
vlist <- takeMVar chanMVar
let reslist = map id vlist
putMVar chanMVar reslist
Mẫu bạn đang sử dụng trong 'strictList' được tổng quát bởi' deepseq'; xem http://hackage.haskell.org/packages/archive/deepseq/latest/doc/html/Control-DeepSeq.html – acfoltzer