On Thu, Feb 12, 2009 at 6:26 PM, Don Stewart <[email protected]> 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. -- Dave Menendez <[email protected]> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
