AERN-Real-0.10.0: src/Data/Number/ER/Misc/STM.hs
{-|
Module : Data.Number.ER.Misc.STM
Description : some STM extras
Copyright : (c) Michal Konecny
License : BSD3
Maintainer : mik@konecny.aow.cz
Stability : experimental
Portability : portable
Miscelaneous utilities related to concurrency.
-}
module Data.Number.ER.Misc.STM where
import Control.Concurrent as Concurrent
import Control.Concurrent.STM as STM
modifyTVar tv update =
do
value <- readTVar tv
let newValue = update value
writeTVar tv newValue
return newValue
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