On Wed, Jan 6, 2010 at 3:09 PM, Sean Kelly <span dir="ltr">&lt;<a href="mailto:kelly.sean@apple.com">kelly.sean@apple.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Jan 6, 2010, at 11:52 AM, Sean Kelly wrote:<br>
&gt;<br>
&gt; In cases 1 and 2, all we really need to worry about is the assignment to x.  On recent x86 we should be able to use 8 byte CAS to do it in one shot, but on other architectures the algorithm seems more complicated.  I&#39;d need to poke around to see if there&#39;s a published algorithm for updating two values together, but here&#39;s a shot at it that uses a special value assigned to the array pointer as a sentinel<br>

<br>
</div>I just thought of a better approach.  Simply set the &#39;1&#39; bit of the pointer to indicate that an update is taking place, since it really will never be set under normal circumstances.<br>
<div><div></div><div class="h5">_______________________________________________<br>
dmd-concurrency mailing list<br>
<a href="mailto:dmd-concurrency@puremagic.com">dmd-concurrency@puremagic.com</a><br>
<a href="http://lists.puremagic.com/mailman/listinfo/dmd-concurrency" target="_blank">http://lists.puremagic.com/mailman/listinfo/dmd-concurrency</a><br>
</div></div></blockquote></div><br>But be sure to tell the GC that pointers can now look like (ptr % 4 == 1) as well as (ptr % 4 == 0).  Otherwise a conservative GC might toss your object.<br><br>Kevin<br><br>