[Haskell-cafe] Efficient mutable arrays in STM
Ben Franksen
ben.franksen at online.de
Mon Oct 31 02:20:12 CET 2011
Benjamin Franksen wrote:
> David Barbour wrote:
>> Create an extra TVar Int for every `chunk` in the array (e.g every 256
>> elements, tuned to your update patterns). Read-write it (increment it, be
>> sure to force evaluation) just before every time you write an element or
>> slice it or slice the array element.
>
> Incrementing and forcing evaluation should not be necessary, a TVar ()
> should be enough.
I was wrong, though not completely.
> I would be very much surprised if the internal STM
> machinery compares the actual _values_ of what is inside a TVar, I guess
> it just notes that a read or a write happened.
According to the original STM paper the implementation does an equality
test, albeit only for pointer equality. So, one should make sure that
whatever is written to the TVar is a new object. An incremented integer
would probably be ok, (no need to evaluate it, since the closure is newly
allocated, thus a new object), a little more on the safe side is a new TVar
i.e. use TVar (TVar ()).
Cheers
Ben
More information about the Haskell-Cafe
mailing list