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

Reply via email to