one*_*uth 11 concurrency haskell
import Control.Concurrent
main = do
    forkIO $ putStrLn "123"
    forkIO $ putStrLn "456"
我已经写了上面的代码.但是当我执行它时,我总是得到它123.456没有打印.我想这是因为主线程在另一个线程之前结束所以整个程序刚刚结束.
我怎么能阻止这个?在所有线程结束后,任何api都可以确保主线程结束?
操作系统:OS X 10.8.3
编译器:ghc 7.4.2
Gab*_*lez 15
使用async图书馆:
import Control.Concurrent.Async
main = do
    a1 <- async $ putStrLn "123"
    a2 <- async $ putStrLn "456"
    mapM_ wait [a1, a2]
这相当于Daniel的解决方案,除了两个小优点:
import Control.Concurrent
main = do
    done <- newEmptyMVar
    forkIO $ putStrLn "123" >> putMVar done ()
    forkIO $ putStrLn "456" >> putMVar done ()
    takeMVar done
    takeMVar done
    -- OR: replicateM_ 2 (takeMVar done)