Memory fence around stg_atomicModifyMutVarzh
Michael Walker
mike at barrucadu.co.uk
Wed Oct 21 12:01:05 UTC 2015
Hello,
I've been trying to figure out where exactly the synchronisation guarantee of
`atomicModifyIORef` comes from, I've gone down a bit of a rabbit-hole of function
calls and macro expansions, and wanted to check I'd got the right idea.
**Assumption:** `stg_atomicModifyMutVarzh` imposes a barrier to reordering, as
described in the Data.IORef documentation.
Call tree:
stg_atomicModifyMutVarzh
dirty_MUT_VAR
recordClosureMutated
recordMutableCap
allocBlock_lock
ACQUIRE_SM_LOCK -> ACQUIRE_LOCK -> pthread_mutex_lock
**Conclusion:** `pthread_mutex_lock` imposes a memory barrier, and it is through
this rather indirect chain of function calls that `stg_atomicModifyMutVarzh`
gets its barrier property.
Is this correct? Or is there a more direct barrier invocation that I have
missed?
Thanks.
--
Michael Walker (http://www.barrucadu.co.uk)
More information about the ghc-devs
mailing list