[GHC] #4001: Implement an atomic readMVar

GHC cvs-ghc at haskell.org
Sun Mar 17 20:15:11 CET 2013


#4001: Implement an atomic readMVar
-------------------------------------------+--------------------------------
    Reporter:  simonmar                    |       Owner:                  
        Type:  task                        |      Status:  new             
    Priority:  low                         |   Milestone:  7.6.2           
   Component:  Runtime System              |     Version:  6.12.2          
    Keywords:                              |          Os:  Unknown/Multiple
Architecture:  Unknown/Multiple            |     Failure:  None/Unknown    
  Difficulty:  Moderate (less than a day)  |    Testcase:                  
   Blockedby:                              |    Blocking:                  
     Related:                              |  
-------------------------------------------+--------------------------------

Comment(by lpsmith):

 There is another possible use case here;  if GHC implemented both an
 atomic `readMVar` and `tryReadMVar`,  then
 `Control.Concurrent.Chan.isEmptyChan` could be implemented in a thread-
 safe way.

 Admittedly, this would require the receiving end of a `Chan a` to use an
 external semaphore by changing the `MVar (Stream a)` to a `(IORef (Stream
 a), MVar ())` pair,  so that the current read hole could be obtained
 without blocking.    But the problem is that without atomic `readMVar`s,
 there is a chance that `isEmptyChan` would observe the stream when another
 thread is in the process of reading from the thread,  and thus say that
 the channel is empty when in fact it is not.   Similarly,  without an
 atomic `tryReadMVar`,  there is the chance that `isEmptyChan` would
 observe the stream when another thread is in the process of calling
 `isEmptyChan`,  and get a faulty empty result.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4001#comment:10>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list