Proposal: replace readMVar with atomicReadMVar, breaking BC

Edward Z. Yang ezyang at MIT.EDU
Wed Jul 10 22:38:49 CEST 2013


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
> 



More information about the Libraries mailing list