> How would you make sure the reference counts are correct without 
> locking?
> 

Yes, a lock is required per variable, but these locks can be stored
in a separate hash, keyed by variable address and magic can be used
to lock a variable before accessing.

It should be possible for multiple interpreters to hold a reference
to the same variable (contrary to what Elizabeth says) - after all
the variable just resides in a heap and all threads share the data
space.

How is a shared variable associated with the shared context?

And should a shift on a shared array not return a mortal variable
- it seems to me that it allocates a new sv and returns that in
Perl_sharedsv_associate:

    /* Now if requested allocate private SV */
    if (psv && !sv) {
        printf("created new sv\n");
        *psv = sv = newSV(0);
    }


Called from:
void
SHIFT(shared_sv *shared)
CODE:
        dTHXc;
        SV* sv;
        ENTER_LOCK;
        SHARED_CONTEXT;
        sv = av_shift((AV*)SHAREDSvPTR(shared));
        CALLER_CONTEXT;
        ST(0) = Nullsv;
        Perl_sharedsv_associate(aTHX_ &ST(0), sv, 0);
        LEAVE_LOCK;
        XSRETURN(1);


Reply via email to