Peter Haworth <[EMAIL PROTECTED]> wrote: > On Wed, 3 Sep 2003 09:24:22 +0200, Leopold Toetsch wrote: >> One general traverse() vtable is just the simpler interface IMHO. >> >> Running through each aggregate just once plus updating a seen_hash seems >> simpler and faster to me and doesn't have any negative impact on PMC size >> and DOD speed.
> And also makes it threadsafe? If a shared PMC is frozen simultaneously by > two threads under Dan's scheme, will the right thing happen? I can't help > being worried about interactions between any two operations which use > flags on the PMCs to makr their progress (such as freezing and DOD, or > two freezes). Good question. We don't have threads yet, they might exist somewhere inside Dan's brain, though. What I know (or think to know is): As in Dan's scheme next_for_GC is inside the PMC and used as flag/id for freeze, this can't be threadsafe (If one thread has visited a PMC its next_for_GC will be set, a second thread would write just the PMC id, because the next_for_GC isn't cleared). So all these operations (clone too) would have to acquire a global lock first AFAIK. For my scheme I don't see *this* kind of problems (all state is kept in automatic variables in the interpreter). Albeit I don't like to know what happens, when a shared aggregate gets sorted on one side and the other is freezing it in the meanwhile. leo