<div class="gmail_quote">On Tue, Mar 20, 2012 at 2:53 AM, Florian Hartwig <span dir="ltr">&lt;<a href="mailto:florian.j.hartwig@gmail.com">florian.j.hartwig@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 19 March 2012 11:46, Ryan Newton &lt;<a href="mailto:rrnewton@gmail.com">rrnewton@gmail.com</a>&gt; wrote:<br>
&gt; As Adam Foltzer mentioned in the trac ticket a really good structure would<br>
&gt; be the concurrent bags from this paper:<br>
&gt;<br>
&gt;    <a href="http://www.cse.chalmers.se/~tsigas/papers/Lock%20Free%20Bag%20SPAA11.pdf" target="_blank">http://www.cse.chalmers.se/~tsigas/papers/Lock%20Free%20Bag%20SPAA11.pdf</a></div></blockquote><div><br></div><div>
Looks like they rely on thread-local storage, which would have to be worked around in Haskell somehow.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;ve just read the paper and they look both useful and interesting to<br>
implement. Adam mentioned that GHC would need to be extended first,<br>
and I can&#39;t really judge how much work that would be. Can anyone chime<br>
in on how feasible that is?<br>
<div class="im"></div></blockquote></div><div><br></div><div>GHC already has a CAS primitive on MutVar#, it just needs to be extended to MutableArray# and MutableByteArray# (at all of the bit-widths the CAS instruction would support, e.g. see readWordXxArray# in <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim-0.2.0.0/GHC-Prim.html">http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim-0.2.0.0/GHC-Prim.html</a>). The implementation should be almost identical to casMutVar#.</div>
<div><br></div><div>In particular I think you need:</div><div><br></div><div>    casMutArray# :: MutableArray# s a -&gt; Int# -&gt; a -&gt; a -&gt; State# s -&gt; (# State# s, Int#, a #)</div><div>    casWord16MutByteArray :: MutableByteArray# s -&gt; Int# -&gt; Word# -&gt; Word# -&gt; State# s -&gt; (# State# s, Int#, Word#)</div>
<div><br></div><div>and equivalents for Word32. Word64, Int16, Int32, Int64.</div><div><br></div><div>G</div>-- <br>Gregory Collins &lt;<a href="mailto:greg@gregorycollins.net" target="_blank">greg@gregorycollins.net</a>&gt;<br>