blob: 4a77b5fc95cf798bca95917a10e245409db5ec56 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
module Main where
import Control.Concurrent
-- This test hopefully exercises the black hole code. The main thread
-- forks off another thread and starts on a large computation.
-- The child thread attempts to get the result of the same large
-- computation (and should get blocked doing so, because the parent
-- won't have evaluated it yet). When the result is available, the
-- child passes it back to the parent who prints it out.
test = sum [1..10000]
main = do
x <- newEmptyMVar
forkIO (if test > 0
then putMVar x test
else error "proc"
)
if test > 0 -- evaluate test
then do result <- takeMVar x
print result
else error "main"
|