NAME

MCE::Shared - MCE extension for sharing data between workers

VERSION

This document describes MCE::Shared version 1.699_004

SYNOPSIS

# OO construction

use MCE::Shared Sereal => 1;

my $ar = MCE::Shared->array( @list );
my $cv = MCE::Shared->condvar( 0 );
my $fh = MCE::Shared->handle( '>>', \*STDOUT );
my $ha = MCE::Shared->hash( @pairs );
my $oh = MCE::Shared->ordhash( @pairs );
my $qu = MCE::Shared->queue( await => 1, fast => 0 );
my $va = MCE::Shared->scalar( $value );
my $nu = MCE::Shared->sequence( $begin, $end, $step, $fmt );
my $ob = MCE::Shared->share( $blessed_object );

# Tie construction

use MCE::Flow;
use MCE::Shared Sereal => 1;
use feature 'say';

tie my $var, 'MCE::Shared', 'initial value';
tie my @ary, 'MCE::Shared', qw(a list of values);
tie my %has, 'MCE::Shared', (key1 => 'value', key2 => 'value');

tie my $cnt, 'MCE::Shared', 0;
tie my @foo, 'MCE::Shared';
tie my %bar, 'MCE::Shared';

my $m1 = MCE::Mutex->new;

mce_flow {
   max_workers => 4
},
sub {
   my ($mce) = @_;
   my ($pid, $wid) = (MCE->pid, MCE->wid);

   ## Locking is required when multiple workers update the same element.
   ## This requires 2 trips to the manager process (fetch and store).

   $m1->synchronize( sub {
      $cnt += 1;
   });

   ## Locking is not necessary when updating unique elements.

   $foo[ $wid - 1 ] = $pid;
   $bar{ $pid }     = $wid;

   return;
};

say "scalar : $cnt";
say " array : $_" for (@foo);
say "  hash : $_ => $bar{$_}" for (sort keys %bar);

-- Output

scalar : 4
 array : 37847
 array : 37848
 array : 37849
 array : 37850
  hash : 37847 => 1
  hash : 37848 => 2
  hash : 37849 => 3
  hash : 37850 => 4

DESCRIPTION

This module provides data sharing for MCE supporting threads and processes. MCE::Shared may run alongside threads::shared.

The documentation below will be completed before the final 1.700 release.

DATA SHARING

array
condvar
handle
hash
ordhash
queue
scalar
sequence
num_sequence

num_sequence is an alias for sequence.

OBJECT SHARING

share

PDL SHARING

pdl_byte
pdl_short
pdl_ushort
pdl_long
pdl_longlong
pdl_float
pdl_double
pdl_ones
pdl_sequence
pdl_zeroes
pdl_indx
pdl
ins_inplace

See the MCE Cookbook on github for PDL demonstrations.

COMMON API

blessed
destroy
export
next
prev
reset
__set - deeply share: no
__mset - deeply share: no
__push - deeply share: no
__unshift - deeply share: no

SERVER API

start
stop
init

INDEX

MCE, MCE::Core

AUTHOR

Mario E. Roy, <marioeroy AT gmail DOT com>