2012-02-28 7 views

cevap

17

Bu kadar bildiğim kadarıyla standart base kitaplıkları ile mümkün değildir, ancak bir parçacığının durumu almak için GHC özgü API kullanabilirsiniz: Ayrıca iplik engellendiğinde hesaba dflemstr cevabı üzerine uzanan

import GHC.Conc 

alive :: ThreadID -> IO Bool 
alive = fmap (== ThreadRunning) . threadStatus 
1

Farklı tanım. Ben aynı zamanda bloke neden nedeni halledilir kez çok yakında o (yazılır mesela bir MVar vb retry tamamlanıncaya üzerinde, bir STM işlem), yine kod yürütme oluyor gibi hayatta sayar düşünüyorum:

import GHC.Conc 
import Control.Monad 

isThreadStatusBlocked :: ThreadStatus -> Bool 
isThreadStatusBlocked (ThreadBlocked _) = True 
isThreadStatusBlocked _ = False 

isAlive :: ThreadId -> IO Bool 
isAlive = fmap (liftM2 (||) (ThreadRunning ==) isThreadStatusBlocked) . threadStatus