[Haskell-cafe] Shared/Exclusive Locks
Chris Kuklewicz
haskell at list.mightyreason.com
Wed Dec 28 11:14:02 EST 2005
John Goerzen wrote:
> Hello,
>
> I have the need for a locking object that can provide shared and
> exclusive locks in much the same manner as the POSIX flock() function.
>
> A thread that acquires an exclusive lock has a guarantee that no other
> thread holds any locks.
>
> A thread that acquires a shared lock has a guarantee that no other
> thread holds an exclusive lock, though any number of other threads hold
> shared locks.
>
> My intuition tells me that this could be implemented in terms of an MVar
> somehow. (At least, I've used MVars for simple locks for quite some
> time.) But I can't quite figure out how. Any ideas?
>
> Thanks,
>
> -- John
STM or IO ?
You need a count of shared locks "S", *Var Word32.
To increase the count "S", you need to hold a mutex "E", *Var ().
So (take mutex "E" >> increment "S" >> release "E") is the the combined
operation.
To decrease the count "S", you do not need to hold a mutex. (decrement "S").
By grabbing the mutex "E" and waiting for "S" to go to zero, you have
acquired exclusive control. When you are done just release "E".
--
Chris
More information about the Haskell-Cafe
mailing list