[Haskell-cafe] How to use QSem?
Simon Marlow
simonmar at microsoft.com
Wed Jun 23 05:56:04 EDT 2004
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
More information about the Haskell-Cafe
mailing list