[Haskell-cafe] MVars and locks

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Wed May 6 19:19:04 UTC 2015

In the following section of the book "Parallel and Concurrent Programming in


Simon Marlow explains that MVars can be used to implement something like
locks on shared functional state: "To acquire the lock, we take the MVar,
whereas, to update the variable and release the lock, we put the MVar."

Am I right in thinking this only holds if we are careful to ensure both
those operations happen in the given order?

For example, if I take the MVar (lock) and I am about to put something back
in (unlock) but someone else puts something in before I do, then the lock
system becomes broken, doesn't it?  So if we want to be sure we have a
robust lock system we have to wrap up MVars in another abstraction?


More information about the Haskell-Cafe mailing list