<div dir="ltr">The action is atomic as long as while one thread is using withMVar another thread isn't using putMVar</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jul 18, 2021 at 6:49 AM Harendra Kumar <<a href="mailto:harendra.kumar@gmail.com">harendra.kumar@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>The documentation of withMVar (in Control.Concurrent.MVar module of base package) says:</div><div><br></div><div><pre><span>{-|
<a name="m_731424684089780610_line-175"></a>  'withMVar' is an exception-safe wrapper for operating on the contents
<a name="m_731424684089780610_line-176"></a>  of an 'MVar'.  This operation is exception-safe: it will replace the
<a name="m_731424684089780610_line-177"></a>  original contents of the 'MVar' if an exception is raised (see
<a name="m_731424684089780610_line-178"></a>  "Control.Exception").  However, it is only atomic if there are no
<a name="m_731424684089780610_line-179"></a>  other producers for this 'MVar'.
<a name="m_731424684089780610_line-180"></a>-}</span>
<a name="m_731424684089780610_line-181"></a><a name="m_731424684089780610_line-184"></a><span>withMVar</span> <span>::</span> <span>MVar</span> <span>a</span> <span>-></span> <span>(</span><span>a</span> <span>-></span> <span>IO</span> <span>b</span><span>)</span> <span>-></span> <span>IO</span> <span>b</span>
<a name="m_731424684089780610_line-185"></a><span>withMVar</span> <span>m</span> <span>io</span> <span>=</span>
<a name="m_731424684089780610_line-186"></a>  <span>mask</span> <span>$</span> <span>\</span><span>restore</span> <span>-></span> <span>do</span>
<a name="m_731424684089780610_line-187"></a>    <span>a</span> <span><-</span> <span>takeMVar</span> <span>m</span>
<a name="m_731424684089780610_line-188"></a>    <span>b</span> <span><-</span> <span>restore</span> <span>(</span><span>io</span> <span>a</span><span>)</span> <span>`onException`</span> <span>putMVar</span> <span>m</span> <span>a</span>
<a name="m_731424684089780610_line-189"></a>    <span>putMVar</span> <span>m</span> <span>a</span>
<a name="m_731424684089780610_line-190"></a>    <span>return</span> <span>b<br><br></span></pre><pre><span style="font-family:arial,sans-serif"><span>Can someone shed some light on what is meant by the statement - <br>"<span>However, it is only atomic if there are no other producers for this 'MVar'."?<br></span></span></span></pre><pre><span style="font-family:arial,sans-serif"><span><span>I hope this is the right mailing list for this question.<br></span></span></span></pre><pre><span style="font-family:arial,sans-serif"><span><span>Thanks,</span></span></span><span><span><span style="font-family:arial,sans-serif"><br>Harendra</span><br></span></span></pre></div></div>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Eric Mertens</div>