Test::SharedObject3pm
Data sharing in multi process.
Usage
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;
Overview
Test::SharedObject provides atomic data operation between multiple process.
Methods
- my $shared = Test::SharedObject->new($value)
-
Creates a new Test::SharedObject instance. And set
$valueas initial value.Internally, Creates temporary file, and serialize
$valueby 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:
- Lock temporary file.
- Read shared value.
- Executes "\&coderef". (Set shared value as first arguments)
- Write return value as shared value.
- Unlock temporary file.
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
$valueas shared value. The syntactic sugar for"$shared->txn()".
- my $value = $shared->
get() -
Get shared value. The syntactic sugar for
"$shared->txn()".
Releases
3 releases since Debian 11 (Bullseye); the text changed 1 time.