| Safe Haskell | None |
|---|
Data.Concurrent.Deque.ChaseLev
Description
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
data ChaseLevDeque a Source
Instances
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