[Haskell-cafe] Race condition possible?

David Menendez dave at zednenem.com
Thu Feb 12 22:58:46 EST 2009


On Thu, Feb 12, 2009 at 6:26 PM, Don Stewart <dons at 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.

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Haskell-Cafe mailing list