File: Distribution.hs

package info (click to toggle)
haskell-ekg-core 0.1.1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 140 kB
  • sloc: haskell: 585; ansic: 62; makefile: 2
file content (23 lines) | stat: -rw-r--r-- 588 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{-# LANGUAGE BangPatterns, OverloadedStrings #-}

-- | Perform 100,000 atomic sample additions using 100 concurrent
-- writers.
module Main where

import Control.Concurrent
import Control.Monad
import System.Metrics.Distribution

main :: IO ()
main = do
    distrib <- new
    locks <- replicateM n newEmptyMVar
    mapM_ (forkIO . work distrib iters) locks
    mapM_ takeMVar locks
  where
    n = 100
    iters = 100000

    work :: Distribution -> Int -> MVar () -> IO ()
    work !_ 0 !lock     = putMVar lock ()
    work distrib i lock = add distrib 1.0 >> work distrib (i - 1) lock