one*_*uth 11 concurrency haskell
import Control.Concurrent
main = do
forkIO $ putStrLn "123"
forkIO $ putStrLn "456"
Run Code Online (Sandbox Code Playgroud)
我已经写了上面的代码.但是当我执行它时,我总是得到它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]
Run Code Online (Sandbox Code Playgroud)
这相当于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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |