I like to look at the code where the runtime detects a TVar, inside an atomic block, has been changed by another thread and hence it aborts the atomic operation. Any suggestion as to where I would find the code?
daryoush On Sun, Dec 7, 2008 at 10:48 PM, Don Stewart <d...@galois.com> wrote: > dmehrtash: > > Any idea was the atomically# mean in the following code? > > > > atomically :: STM a -> IO a > > atomically (STM m) = IO (\s -> (atomically# m) s ) > > > > Code is from GHC.Conc module > > [1] > http://www.haskell.org/ghc/docs/6.6/html/libraries/base/GHC-Conc.html > > It is a primitive hook into the runtime, where transactional memory is > implemented. > > It is documented in the primops module in the GHC source, > > $ cd ghc/compiler/prelude/ > > ------------------------------------------------------------------------ > section "STM-accessible Mutable Variables" > ------------------------------------------------------------------------ > > primtype TVar# s a > > primop AtomicallyOp "atomically#" GenPrimOp > (State# RealWorld -> (# State# RealWorld, a #) ) > -> State# RealWorld -> (# State# RealWorld, a #) > with > out_of_line = True > has_side_effects = True > > primop RetryOp "retry#" GenPrimOp > State# RealWorld -> (# State# RealWorld, a #) > with > out_of_line = True > has_side_effects = True > > > Along with other primitives like: > > ------------------------------------------------------------------------ > section "Parallelism" > ------------------------------------------------------------------------ > > primop ParOp "par#" GenPrimOp > a -> Int# > with > -- Note that Par is lazy to avoid that the sparked thing > -- gets evaluted strictly, which it should *not* be > has_side_effects = True > > -- Don > -- Daryoush Weblog: http://perlustration.blogspot.com/
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe