Hello Bulat,
Tuesday, April 7, 2009, 6:50:14 PM, you wrote:
> tid <- forkIO (executing commands from chan...)
> waitQSem sem
> killThread tid
> instead of killThread we really should send pseudo-job (like my
> Nothing value) that will led to self-killing of job that gets this
> signal
> this solution still may lead to a bit more or less than N threads
> executed at the same time. your turn!
solved! every job should go together with Bool flag `killItself`.
last job should have this flag set to True. thread will execute job
and kill itself if this flag is True. so we get strong guarantees that
there are exactly N threads in the system:
para xs = do
sem <- newQSem
for (init xs) $ \x -> do
writeChan chan (x `finally` signalQSem sem, False)
writeChan chan (last x `finally` signalQSem sem, True)
--
tid <- forkIO $ do
let cycle = do
(x,flag) <- readChan chan
x
unless flag cycle
cycle
--
waitQSem sem
btw, this problem looks a great contribution into "Haskell way"
book of exercises
--
Best regards,
Bulat mailto:[email protected]
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe