IPC and counters

Simon Wistow simon at thegestalt.org
Tue Oct 14 23:21:18 BST 2008


I have an IPC problem.

I have a parent process with a bunch of forked children.

The parent sits in a loop waiting for messages and occasionally passes 
them onto the children which are also sitting in their own loops 
listening for messages and then doing stuff with them. 

Still with me?

Now occasionally, if a Child gets sent a message then it doesn't want 
any of the other Children to do anything. 

So what I think is something like this.

    Parent:

    my $n  = scalar(@children);
    my $id = $message->id;
    create_ipc_counter("$id-lock", 0);
    foreach my $child (@children) {
        $child->send($message);
    }

    Child:

    my $message = get_message();
    my $id      = $message->id;

    # If we're the first ...
    if (inc_ipc_counter("$id-lock")==1) {
        do_something($message);
    } 
    # ... otherwise ignore it

    # If we're the last then clean up
    if (dec_ipc_count("$id-count")==0) {
        destroy_ipc_counter("$id-count");
        destroy_ipc_counter("$id-lock");
    }

Is there some sort of module which will do similar? Or am I smoking huge 
quanities of crack?

Is there another way to do this?

Simon




More information about the london.pm mailing list