3
ブラケットはスレッド内でリソースを解放しません
Haskellで問題が発生しbracketています。フォークされたスレッド内で(forkFinally)bracketの2番目の引数を使用して実行すると、プログラムの終了時にリソースを解放する計算が実行されません。 問題を示すコードは次のとおりです(この特定のケースでは、バッファリングを無効にしてファイルにすぐに書き込むことができることを知っています)。 import System.IO import Control.Exception ( bracket , throwTo ) import Control.Concurrent ( forkFinally , threadDelay ) main = do threadId <- forkFinally (writeToFile "first_file") (\ex -> putStrLn $ "Exception occurred: " ++ show ex) putStrLn "Press enter to exit" _ <- getLine putStrLn "Bye!" writeToFile :: FilePath -> …