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
- 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()".
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 <[email protected]>