Newer
Older
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
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
replicateM_ 10 (forkIO $ incrementAndPrint counter)