module Control.Concurrent.Extra(
module Control.Concurrent,
withNumCapabilities, setNumCapabilities
) where
import Control.Concurrent
#if __GLASGOW_HASKELL__ >= 706
hiding (setNumCapabilities)
import qualified Control.Concurrent
#endif
import Control.Exception
withNumCapabilities :: Int -> IO a -> IO a
withNumCapabilities new act | rtsSupportsBoundThreads = do
old <- getNumCapabilities
if old == new then act else
bracket_ (setNumCapabilities new) (setNumCapabilities old) act
setNumCapabilities :: Int -> IO ()
#if __GLASGOW_HASKELL__ >= 706
setNumCapabilities n = Control.Concurrent.setNumCapabilities n
#else
setNumCapabilities n = return ()
#endif