Skip to content
try1.hs 642 B
Newer Older
Yuanle Song's avatar
Yuanle Song committed
import Control.Monad
import Control.Concurrent.MVar
import Control.Concurrent
import Text.Printf
import System.Random

fuzz :: IO ()
fuzz = do
  seconds <- getStdRandom random :: IO Double
Yuanle Song's avatar
Yuanle Song committed
  threadDelay $ round (realToFrac (1000 * seconds))

incrementAndPrint :: MVar Integer -> IO ()
incrementAndPrint counter = do
  fuzz
  newCount <- modifyMVar counter (\i -> return (i + 1, i + 1))
  fuzz
  printf "The count is %d\n" newCount
  fuzz
  putStrLn "---------------"

main :: IO ()
main = do
  putStrLn "Starting up"
  counter <- newMVar 0
Yuanle Song's avatar
Yuanle Song committed
  replicateM_ 10 (forkIO $ incrementAndPrint counter)
Yuanle Song's avatar
Yuanle Song committed
  putStrLn "Finishing up"
Yuanle Song's avatar
Yuanle Song committed
  threadDelay 1000000