Safe Haskell | None |
---|
Chase-Lev work stealing Deques
This implementation derives directly from the pseudocode in the 2005 SPAA paper:
http:citeseerx.ist.psu.eduviewdocdownload?doi=10.1.1.170.1097&rep=rep1&type=pdf
TODO: local topBound optimization. TODO: Do the more optimized version of growCirc
- data ChaseLevDeque a
- newQ :: IO (ChaseLevDeque elt)
- nullQ :: ChaseLevDeque elt -> IO Bool
- pushL :: ChaseLevDeque a -> a -> IO ()
- tryPopL :: ChaseLevDeque elt -> IO (Maybe elt)
- tryPopR :: ChaseLevDeque elt -> IO (Maybe elt)
- dbgInspectCLD :: Show a => ChaseLevDeque a -> IO String
Documentation
newQ :: IO (ChaseLevDeque elt)Source
nullQ :: ChaseLevDeque elt -> IO BoolSource
pushL :: ChaseLevDeque a -> a -> IO ()Source
For a work-stealing queue pushL
is the `local'
push. Thus
only a single thread should perform this operation.
tryPopL :: ChaseLevDeque elt -> IO (Maybe elt)Source
tryPopR :: ChaseLevDeque elt -> IO (Maybe elt)Source
This is the steal operation. Multiple threads may concurrently attempt steals from the same thread.
dbgInspectCLD :: Show a => ChaseLevDeque a -> IO StringSource