Skip to content

Tight loop prevents other threads from running in available cores

The following program does not terminate when compiled with: ghc --make -O -threaded test.hs and executed on linux on an amd64 machine with 16 cores with: ./test

import Control.Concurrent
import Control.Monad
import System.Environment

main :: IO ()
main = do
  y <- getArgs
  mv0 <- newEmptyMVar
  mv1 <- newEmptyMVar
  forkIO $ do
    takeMVar mv0
    putMVar mv1 ()
    loop (y == ["yield"])
  putMVar mv0 ()
  takeMVar mv1
     >>= print

loop :: Bool -> IO ()
loop cooperative = go
  where
    go = when cooperative yield >> go

Here [1] is the discussion about it so far.

[1] http://www.haskell.org/pipermail/glasgow-haskell-users/2013-October/024412.html

Trac metadata
Trac field Value
Version 7.6.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Runtime System
Test case
Differential revisions
BlockedBy
Related
Blocking
CC simonmar
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information