On Wed, Aug 17, 2005 at 05:06:55 -0000, David Formosa (aka ? the Platypus) 
wrote:

> This should be changed, timelyness will not prevent deadlock.  However
> it will prevent resource starvation aka livelock.

What I meant is deadlock due to resource starvation:

        my $semaphore = Sempahore.new(5);

        my $object = Moose.new($semaphore); # takes as much as it likes,
        # destructor releases semaphore

        ...

        undefined($object);
        my $other = Moose.new($semaphore); # this might or might not
        # hang till the GC kicks in

BTW, we need an interface like:

    class Resource { # a mutex of sorts
                has enum<<Locked Free>> $:state = Free;
                method claim ($claimee = $?CALLER::SELF) : atomic {
                        $:state = Locked;
                        $claimee but GC::timely GC::append_finalize({ $:state = 
Free });
                }
        }

then an object can say:

        class Object {
                method use_this ($resource){
                        $resource.claim;
                }
        }

And without worrying about adding a finalizer of it's own (the added
finalizers don't conflict either, and due to post order happen
before the class's finalizer).

> I'm not sure that replacing the GC is going to be easy,  I expect
> thats going to involve heavy magic.

If the runtime has an interface where it allows you to replace the
GC with some pluggable GCs it supports, then why not?

-- 
 ()  Yuval Kogman <[EMAIL PROTECTED]> 0xEBD27418  perl hacker &
 /\  kung foo master: /me does not drink tibetian laxative tea: neeyah!

Attachment: pgpWeYZw6jpT8.pgp
Description: PGP signature

Reply via email to