[Haskell-beginners] Concurrent vs GHC

Mauricio Hernandes maukeshigomu at gmail.com
Sat Jun 30 19:51:27 CEST 2012


Eternal Gratitude for the help, it's working perfectly, I will consider the
exceptions and other stuff now.

the code looks like this now


import System.IO
import Control.Concurrent
import Data.List
import Control.Monad

main = do
          finished <- newEmptyMVar
          input <- newMVar  [1..30000]
          ia <- newEmptyMVar
          ib <- newEmptyMVar
          ic <- newEmptyMVar

          forkIO $ do x <- readMVar input
                      putMVar ia x
                      putMVar finished ()

          forkIO $ do a <- readMVar ia
                      putMVar ib ( sum a )
                      putMVar finished ()

          forkIO $ do a <- readMVar ia
                      putMVar ic ( reverse a )
                      putMVar finished ()

          b <- readMVar ib
          c <- readMVar ic
          writeFile "somaEprod.txt" (show b ++ "\n")
          appendFile "somaEprod.txt" (show c)
          replicateM_ 3 (takeMVar finished)




Valeu
Mauricio

On Sun, Jul 1, 2012 at 12:24 AM, Felipe Almeida Lessa <
felipe.lessa at gmail.com> wrote:

> Your application is exiting before your forkIOs get a chance to
> execute.  Instead of
>
>  forkIO $ do
>    ...
>  forkIO $ do
>    ...
>  forkIO $ do
>    ...
>
> use something like
>
>  finished <- newEmptyMVar
>
>  forkIO $ do
>    ...
>    putMVar finished ()
>
>  forkIO $ do
>    ...
>    putMVar finished ()
>
>  forkIO $ do
>    ...
>    putMVar finished ()
>
>  replicateM_ 3 (takeMVar finished)
>
> Doing so will avoid your program to exit until all threads have finished.
>
> Note that the code above is extremely fragile: doesn't handle
> exceptions, you have to manually specify the number of threads that
> you opened, etc.  These are abstracted by some libraries on Hackage
> that you may use later for Real World Code (TM).
>
> Cheers, =)
>
> --
> Felipe.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120701/8e97db80/attachment.htm>


More information about the Beginners mailing list