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&nbsp; aborts the atomic operation.&nbsp; Any suggestion as to where I would find the code?<br><br>daryoush<br>
<br><div class="gmail_quote">On Sun, Dec 7, 2008 at 10:48 PM, Don Stewart <span dir="ltr">&lt;<a href="mailto:dons@galois.com">dons@galois.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
dmehrtash:<br>
<div class="Ih2E3d">&gt; &nbsp; &nbsp;Any idea was the atomically# mean in the following code?<br>
&gt;<br>
&gt; &nbsp; &nbsp;atomically :: STM a -&gt; IO a<br>
&gt; &nbsp; &nbsp;atomically (STM m) = IO (\s -&gt; (atomically# m) s )<br>
&gt;<br>
&gt; &nbsp; &nbsp;Code is from GHC.Conc module<br>
</div>&gt; &nbsp; &nbsp;[1]<a href="http://www.haskell.org/ghc/docs/6.6/html/libraries/base/GHC-Conc.html" target="_blank">http://www.haskell.org/ghc/docs/6.6/html/libraries/base/GHC-Conc.html</a><br>
<br>
It is a primitive hook into the runtime, where transactional memory is<br>
implemented.<br>
<br>
It is documented in the primops module in the GHC source,<br>
<br>
 &nbsp; &nbsp;$ cd ghc/compiler/prelude/<br>
<br>
 &nbsp; &nbsp;------------------------------------------------------------------------<br>
 &nbsp; &nbsp;section &quot;STM-accessible Mutable Variables&quot;<br>
 &nbsp; &nbsp;------------------------------------------------------------------------<br>
<br>
 &nbsp; &nbsp;primtype TVar# s a<br>
<br>
 &nbsp; &nbsp;primop &nbsp;AtomicallyOp &quot;atomically#&quot; GenPrimOp<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(State# RealWorld -&gt; (# State# RealWorld, a #) )<br>
 &nbsp; &nbsp; &nbsp; -&gt; State# RealWorld -&gt; (# State# RealWorld, a #)<br>
 &nbsp; &nbsp; &nbsp; with<br>
 &nbsp; &nbsp; &nbsp; out_of_line = True<br>
 &nbsp; &nbsp; &nbsp; has_side_effects = True<br>
<br>
 &nbsp; &nbsp;primop &nbsp;RetryOp &quot;retry#&quot; GenPrimOp<br>
 &nbsp; &nbsp; &nbsp; State# RealWorld -&gt; (# State# RealWorld, a #)<br>
 &nbsp; &nbsp; &nbsp; with<br>
 &nbsp; &nbsp; &nbsp; out_of_line = True<br>
 &nbsp; &nbsp; &nbsp; has_side_effects = True<br>
<br>
<br>
Along with other primitives like:<br>
<br>
------------------------------------------------------------------------<br>
section &quot;Parallelism&quot;<br>
------------------------------------------------------------------------<br>
<br>
 &nbsp; &nbsp;primop &nbsp;ParOp &quot;par#&quot; GenPrimOp<br>
 &nbsp; &nbsp; &nbsp; a -&gt; Int#<br>
 &nbsp; &nbsp; &nbsp; with<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- Note that Par is lazy to avoid that the sparked thing<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- gets evaluted strictly, which it should *not* be<br>
 &nbsp; &nbsp; &nbsp; has_side_effects = True<br>
<font color="#888888"><br>
-- Don<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Daryoush<br><br>Weblog: &nbsp;<a href="http://perlustration.blogspot.com/">http://perlustration.blogspot.com/</a><br>