Memory Barriers with STM and MVar

Andrew Martin andrew.thaddeus at
Fri May 24 17:38:05 UTC 2019

I've been poking around in old threads and in the GHC source, and I cannot
find this documented anywhere. What are the guarantees that GHC provides
around load/store reordering when it comes to using MVar or
TVar+retry+atomically. For example:

import Data.Primitive
import Control.Concurrent.MVar
foo :: IO ()
foo = do
  writeByteArray myArr 13 (42 :: Word)
  putMVar myMVar ()

If there is another thread that calls takeMVar followed by `readByteArray
myArr 13`, is it guaranteed by GHC to see the 42 that's been written to the
array. Same question applies for situations using STM facilities to
accomplish blocking behavior that MVar gives us. Any documentation or
pointers to places in GHC source where these barriers are guaranteed would
be appreciated.

-Andrew Thaddeus Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list