[Haskell-cafe] Traversing a graph in STM

Einar Karttunen ekarttun at cs.helsinki.fi
Mon Sep 18 04:47:23 EDT 2006


On 18.09 01:23, Josef Svenningsson wrote:
> On 9/17/06, Jan-Willem Maessen <jmaessen at alum.mit.edu> wrote:
> >You can associate a unique name with each traversal, and store a set
> >of traversals at each node (instead of a mark bit).  But this set
> >grows without bound unless you follow each traversal with a "cleaning
> >traversal" which removes a traversal tag from the set.  And you'd
> >need some way to generate the unique names.
> >
> Well, if your set implementation used weak pointers there would be no
> need for a cleaning traversal. The garbage collector will take care of
> that. The only slightly tricky thing is to keep a live pointer to the
> unique traversal name during the entire of the traversal. But I don't
> think that should be a big problem.
>

This suffers from the problem that two traversals reading the
same parts of the graph would have a good chance to make each other
retry.

I am thinking of going the StableName route. But as this happens
inside STM Data.HashTable does not help much (without using
unsafeIOToSTM and dealing with retries).

If StableNames were in Ord using Set (StableName T)
would be nice. But in the current implementation one has to resort
to IntSet Int [StableName T] which is not pretty at all.

- Einar Karttunen


More information about the Haskell-Cafe mailing list