<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 14, 2016 at 8:06 PM, Alexandre Beniaminov <span dir="ltr"><<a href="mailto:abeniaminov@gmail.com" target="_blank">abeniaminov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">atomic</blockquote></div><br>You have to say what you expect to be atomic/linearizable. In your above code, suppose you are being scheduled out between the call to ets:first/1 and ets:take/2. Now, anything can happen in between, so in particular, ets:take/2 may return [] if the key was deleted or taken out by another process between the two calls.</div><div class="gmail_extra"><br></div><div class="gmail_extra">But taken individually, the set of ets:first/1, ets:take/2 and ets:lookup/2 ought to be linearizable. I.e., there is some point in time (the atomic commit-point) at which ets:take/2 removes the objects. After this commit-point first/1 and lookup/2 will not see the Key present in the table anymore.</div><div class="gmail_extra"><br></div><div class="gmail_extra">So the question of if it is atomic or not depends on the precise definition of what you ask.<br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">J.</div>
</div></div>