July 2013
Intermediate to advanced
322 pages
8h 43m
English
Content preview from Parallel and Concurrent Programming in HaskellBecome an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
Start your free trial



Chapter 7. Basic Concurrency: Threads and MVars
The fundamental action in concurrency is forking a new
thread of control. In Concurrent Haskell, this is achieved with the
forkIO operation:
forkIO::IO()->IOThreadId
The forkIO operation takes a computation of type IO () as its
argument; that is, a computation in the IO monad that eventually
delivers a value of type (). The computation passed to forkIO is
executed in a new thread that runs concurrently with the other
threads in the system. If the thread has effects, those effects will
be interleaved in an indeterminate fashion with the effects from other
threads.
To illustrate the interleaving of effects, let’s try a simple example
with two threads, one that repeatedly prints the letter A while
the other repeatedly prints B:
fork.hs
importControl.ConcurrentimportControl.MonadimportSystem.IOmain=dohSetBufferingstdoutNoBuffering--![]()
forkIO(replicateM_100000(putChar'A'))--![]()
replicateM_100000(putChar'B')--