AERN-RnToRm-Plot-0.1.0: src/Data/Number/ER/MiscSTM.hs
{-|
Utilities related to concurrency.
-}
module Data.Number.ER.MiscSTM where
import Control.Concurrent as Concurrent
import Control.Concurrent.STM as STM
modifyTVar tv update =
do
value <- readTVar tv
writeTVar tv $ update value
modifyTVarGetOldVal tv update =
do
value <- readTVar tv
writeTVar tv $ update value
return value
modifyTVarHasChanged tv update =
do
value <- readTVar tv
let newValue = update value
if value == newValue
then return False
else
do
writeTVar tv $ update value
return True