Dan Sugalski:
# It's impossible to have clone in a threaded environment guarantee that
it
# won't deadlock.

If I recall correctly, all shared variables are owned by a single shared
interpreter.  What if, the first time the traversal encounters a shared
PMC, it gets a lock on the shared interpreter?  If a second traversal in
another thread encountered another shared PMC, it would block until the
first traversal was finished.  (And if there isn't a shared interpreter,
a global mutex would probably work just as well.)

Pseudocode:

        bool seen_shared=false;
        ...
                if(PMC_is_shared(pmc)) {
                        if(! seen_shared) {
                                Interp_lock(shared_interpreter);
                                seen_shared=true;
                        }
                        PMC_lock(pmc);
                }
        ...

        if(seen_shared) {
                Interp_unlock(shared_interpreter);
        }
        
--Brent Dax <[EMAIL PROTECTED]>
Perl and Parrot hacker
 
"Yeah, and my underwear is flame-retardant--that doesn't mean I'm gonna
set myself on fire to prove it."

Reply via email to