Proposal: replace readMVar with atomicReadMVar, breaking BC

John Lato jwlato at gmail.com
Thu Jul 11 01:43:00 CEST 2013


+1 from me.  I don't think anyone really wants the current readMVar
semantics anyway, and if somebody really does they can define their own
non-atomic readMVar.  Thanks for working on this!


On Thu, Jul 11, 2013 at 4:38 AM, Edward Z. Yang <ezyang at mit.edu> wrote:

> Oh, found it.
>
> Excerpts from Austin Seipp's message of Wed Jul 10 12:28:48 -0700 2013:
> > After reading some of the background and seeing this, +1 (Frankly, I
> > didn't even know before this that readMVar had the race condition you
> > described, and from my point of view, it should simply be fixed!)
> >
> > Also: If you add a small release note blurb for the changes `base`,
> > that would be wonderful too. :)
> >
> > On Wed, Jul 10, 2013 at 4:20 AM, Edward Z. Yang <ezyang at mit.edu> wrote:
> > > GHC HEAD recently got a new primitive: atomicReadMVar#, which allows
> you
> > > to read MVars without first taking and then putting back (removing a
> > > nasty race where readMVar only works properly when there are no waiting
> > > putters).
> > >
> > > atomicReadMVar behaves differently from readMVar.  The key
> > > differences are:
> > >
> > >     - An atomicReadMVar op never causes an MVar to become "empty" at
> any point.
> > >       This means less programs deadlock now.
> > >
> > >     - An blocked atomicReadMVar is always served by the *first* putMVar
> > >       to arrive (it cuts to the head of the queue), whereas readMVar
> > >       obeyed the FIFO ordering.  This means this program behaves
> differently:
> > >
> > >         m <- newEmptyMVar
> > >         forkIO $ takeMVar m
> > >         threadDelay 100
> > >         forkIO $ print =<< readMVar m {- atomicReadMVar m -}
> > >         threadDelay 100
> > >         putMVar m 1
> > >         putMVar m 2
> > >         -- readMVar: outputs 2
> > >         -- atomicReadMVar: outputs 1
> > >
> > >       It actually would not be too difficult to add support for
> atomicReadMVar
> > >       which *does* respect the FIFO ordering but I don't have a sense
> when
> > >       that would be useful.
> > >
> > > The general feeling Simon and I have is that everyone really wanted
> > > to make believe readMVar was atomicReadMVar, and so maybe we should
> > > break BC and make readMVar do the right thing.  But it is probably
> > > worth some discussion, and I entreat you to think about the second
> > > point more carefully.
> > >
> > > Thanks,
> > > Edward
> > >
> > > _______________________________________________
> > > Libraries mailing list
> > > Libraries at haskell.org
> > > http://www.haskell.org/mailman/listinfo/libraries
> >
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20130711/a6dd6ad5/attachment.htm>


More information about the Libraries mailing list