Ah, that worked. Thank you. The MVar documentation is also very brief. I would also like to overwrite the contents of an MVar atomically regardless of whether it is full or empty. I am current using.
overWrite mvar val = tryTakeMVar mvar >> putMVar mvar val But it is not atomic :-( The lib functions (modifyMVar and tryPutMVar) are atomic but seem to require that you know in advance the MVar's state. Is there a solution to this or do I have to refactor? -Alex- _________________________________________________________________ S. Alexander Jacobson mailto:[EMAIL PROTECTED] tel:917-770-6565 http://alexjacobson.com On Wed, 23 Jun 2004, Simon Marlow wrote: > On 22 June 2004 21:44, S. Alexander Jacobson wrote: > > > The GHC documentation on QSem is very sparse. I > > would like to give a thread exclusive access to a > > resource. > > > > My *guess* based on the documentation is that I > > can create an exclusive lock using: > > > > logSem <- newQSem 1 > > If the maximum value of your QSem is 1, then an MVar will do. That is, > an MVar can be used as a simple semaphore, and a QSem is necessary if > you need a quantity semaphore (there are > 1 units of the resource). > > > And then any thread that wants to lock the > > resource uses: > > > > withLogSem x = do waitQSem logSem; y <- x; signalQSem logSem; > > return y > > > > as follows: > > > > withLogSem $ rotate curLogPos > > import Control.Concurrent, create the semaphore like this: > > m <- newMVar () > > and use it like this: > > withMVar m $ \_ -> ... critical section ... > > If you are using the semaphore to protect a mutable variable, then you > can handily merge the two ideas into an MVar, which behaves like a > thread-safe mutable variable. > > Cheers, > Simon > _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
