gpt4 book ai didi

haskell - 如何确保主线程在所有其他线程结束后结束?

转载 作者:行者123 更新时间:2023-12-02 09:25:09 25 4
gpt4 key购买 nike

import Control.Concurrent
main = do
forkIO $ putStrLn "123"
forkIO $ putStrLn "456"

上面的代码是我写的。但当我执行它时,我总是只得到 123 。不打印456。我猜这是因为主线程在另一个线程之前结束,所以整个程序刚刚结束。

如何防止这种情况发生?任何 api 都可以确保主线程在所有线程结束后结束吗?

操作系统:OS X 10.8.3

编译器:ghc 7.4.2

最佳答案

使用async库:

import Control.Concurrent.Async

main = do
a1 <- async $ putStrLn "123"
a2 <- async $ putStrLn "456"
mapM_ wait [a1, a2]

这与 Daniel 的解决方案等效,但有两个微小的优点:

  • 它确保 fork 线程中引发的任何异常都会在父线程中重新引发,而不会导致死锁
  • 更方便

关于haskell - 如何确保主线程在所有其他线程结束后结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com