Skip to content

karupanerura/Test-SharedObject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Coverage Status

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 $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:

    • 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 $value as 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 karupa@cpan.org

About

Data sharing in multi process.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages