Scroll to navigation

Test::SharedObject(3pm) User Contributed Perl Documentation Test::SharedObject(3pm)

NAME

Test::SharedObject - Data sharing in multi process.

SYNOPSIS

    use strict;
    use warnings;
    use Test::More tests => 2;
    use Test::SharedFork;
    use Test::SharedObject;
    my $shared = Test::SharedObject->new(0);
    is $shared->get, 0;
    my $pid = fork;
    die $! unless defined $pid;
    if ($pid == 0) {# child
        $shared->txn(sub {
            my $counter = shift;
            $counter++;
            return $counter;
        });
        exit;
    }
    wait;
    is $shared->get, 1;

DESCRIPTION

Test::SharedObject provides atomic data operation between multiple process.

METHODS

Creates a new Test::SharedObject instance. And set $value as initial value.

Internally, Creates temporary file, and serialize $value by Storable, and save.

$shared->txn(\&coderef)
Provides atomic data operation between multiple process in "\&coderef". Set shared value as first arguments in "\&coderef", and return value as new shared value.

Internally:

Good Example:

    $shared->txn(sub {
        my $counter = shift;
        $counter++; # atomic!!
        return $counter;
    });

Bad Example:

    my $counter;
    $shared->txn(sub {
        $counter = shift;
    });
    $counter++; # *NOT* atomic!!
    $shared->txn(sub {
        return $counter;
    });
$shared->set($value)
Set $value as shared value. The syntactic sugar for "$shared->txn()".
Get shared value. The syntactic sugar for "$shared->txn()".

LICENSE

Copyright (C) karupanerura.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

karupanerura <karupa@cpan.org>

2022-10-13 perl v5.34.0