
Its probably too long to bring back this topic, but i have a small question. If some threads may never terminate and have to be killed by killThread, are they going back to the pool, or we need some twist to force them. Thanks a lot TuanAnh
From: genneth
To: haskell-cafe@haskell.org Subject: [Haskell-cafe] Re: Thread pool in GHC Date: Thu, 4 Aug 2005 16:47:56 +0000 (UTC) Dinh Tien Tuan Anh
writes: Can thread pool be implemented in GHC ?
I have a program that is currently using about 12-15 threads (launch and kill for infinite times) and when running, especially after Ctrl-C, my computer got freezed up. And if i ran it several times, the "Stack overflows" occurs.
I made the following a while back. Maybe it's useful...
limitedThreadsWithChannelMapM :: Integer -> (a -> IO b) -> [a] -> IO [MVar b] limitedThreadsWithChannelMapM lim ioaction x = do threadpoolcounter <- atomically ( newTVar 0 ) mapM (throttledFork threadpoolcounter . ioaction) x where throttledFork poolcount io = do atomically ( do prev <- readTVar poolcount if prev >= lim then retry else writeTVar poolcount (prev+1) ) mvar <- newEmptyMVar forkIO( finally (io >>= putMVar mvar) (atomically ( readTVar poolcount >>= writeTVar poolcount . (subtract 1) ) ) ) return mvar
Cheers TuanAnh
_________________________________________________________________ Winks & nudges are here - download MSN Messenger 7.0 today! http://messenger.msn.co.uk
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_________________________________________________________________ Winks & nudges are here - download MSN Messenger 7.0 today! http://messenger.msn.co.uk