On Thu, 2009-02-12 at 22:58 -0500, David Menendez wrote:
> On Thu, Feb 12, 2009 at 6:26 PM, Don Stewart <
dons@galois.com> wrote:
> > bugfact:
> >> Consider the following code
> >>
> >> stamp v x = do
> >> t <- getCurrentTime
> >> putMVar v (x,t)
> >>
> >> Is it possible - with GHC - that a thread switch happens after the t <-
> >> getCurrentTime and the putMVar v (x,t)?
> >
> > Yes. if 't' is heap allocated, there could be a context switch.
> >
> >> If so, how would it be possible to make sure that the operation of reading the
> >> current time and writing the pair to the MVar is an "atomic" operation, in the
> >> sense that no thread switch can happen between the two? Would this require STM?
> >>
> >
> > Using 'atomically' and TVars in STM, perhaps? Else, use withMVar? Or a
> > modifyMVar in IO?
>
> As I understand it, withMVar or modifyMVar will protect you from
> extraneous exceptions, but they won't prevent another thread from
> writing to the MVar between the take and the put.