Ключевые слова:ipc, perl, proccess, share, lock, (найти похожие документы)
Date: Wed, 04 Aug 2004 18:03:56 +0600
From: Yury Kopyl <hrg@promekbank.ru.>
Newsgroups: ftn.ru.perl
Subject: Использование общей памяти между двумя Perl процессами
KT> Есть ещё http://search.cpan.org/~shay/Win32-SharedFileOpen-3.18/
KT> Есть другой простой способ - открываешь отображаемый файл двумя
KT> процессами, заботишься о блокировках, и всё.
Если надо шарить память только между родителем и потомками, то поможет
слежующее
---- огрызок старого запылившегося файла ---
use strict;
use Data::Dumper;
use Carp;
use IO::Handle;
my $THREAD_COUNT=4;
print "main started\n";
$|=1;
my @pids;
foreach my $i (1..$THREAD_COUNT){
$pids[$i]->{READER}=IO::Handle->new;
$pids[$i]->{WRITER}=IO::Handle->new;
$pids[$i]->{READER}->autoflush(1);
$pids[$i]->{WRITER}->autoflush(1);
pipe ($pids[$i]->{READER},$pids[$i]->{WRITER});
my $pid=fork;
if ($pid){
$pids[$i]->{WRITER}->close;
$pids[$i]->{pid}=$pid;
} else {
croak "$!" unless (defined($pid));
$pids[$i]->{READER}->close;
my $handle=$pids[$i]->{WRITER};
start_thread(); #thread body
$pids[$i]->{WRITER}->close;
exit;
};
};
foreach my $i (1..$THREAD_COUNT){
my $handler=$pids[$i]->{READER};
while (my $str=<$handler>){
read smth...
};
$pids[$i]->{READER}->close;
waitpid $pids[$i]->{pid},0;
};
print "main finished\n";