<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body><div><p>You can use ets:select_replace/2 to do an atomic compare-and-swap operation:</p><p><br></p>
        <div class="example hljs"><pre>[Old] = ets:lookup(T, Key),</pre><pre>New = update_object(Old),</pre><pre>Success = (1 =:= ets:select_replace(T, [{Old, [], [{const, New}]}])),
<br></pre><pre><br></pre><pre>ets:select_replace/2 was introduced in OTP-20.</pre><pre><br></pre><pre><br></pre><pre>/Sverker</pre><pre>        </pre></div></div><div><br></div><div>On mån, 2018-11-19 at 18:44 +0000, Vans S wrote:</div><blockquote type="cite"><div>Currently there is no atomic function to update a ETS value when its not a tuple.  For example if one of my ETS values is a map, and I want to put an element into the map, I have no atomic way to do so.<br><br>Is there anyone else that really has a need for a function like :ets.update/3 where arg 1 is ets_table, 2 is key, 3 is fun callback that is called passing the original element and the reply should be the new element?</div><div class="ydp4921ffaeyahoo-style-wrap" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px;"></div><pre>_______________________________________________
erlang-questions mailing list
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>
<a href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a>
</pre></blockquote></body></html>