perl的共享内存

perl的共享内存

perl的共享内存
我想用perl 语言在linux中实现将一些变量存储到内存中,供另外的程序获取,在网上搜索现在只知道大概应该是:
#!/usr/bin/perl
use IPC::Shareable ;
#print SHM_GLUE."AAA\n";
# create a shared memory segment for child status
tie(%monthhash,'IPC::Shareable','month',
{ create =>1,exclusive=>1,destroy=>1,mode=>0600})
or die "Can't tie \%monthhash to shared memory: $!";
#tie %monthhash ,'IPC::Shareable','month',{create=>;1,destroy=>;1};
%monthhash=(
Jan=>1,
Feb=>2,
Mar=>3,
Apr=>4,
May=>5,
Jun=>6,
Jul=>7,
Aug=>8,
Sep=>9,
Oct=>10,
Nov=>11,
Dec=>12);
但是 我执行这个脚本后%monthhash 就 共享到内存中了吗?[CCB]10[/CCB]
能解释一下你为什么想这么.
能解释一下你为什么想这么做么?
这个好像不太可能吧--如.
这个好像不太可能吧
如果一个程序可以使用APACHE的内存变量那不是很危险的?
如果我没记错的话use IPC::Shareable;应该是把某个变量做成全局变量供这一个进程的下的程序使用
他的文档里面有例子的啊.
IPC::Shareable 的 share .
IPC::Shareable 的 share 只是在 perl 程序间。我觉得 Cache::FileCache 要比 IPC::Shareable 好用些。

不知道具体要求怎么样, 如果是与非 Perl 的程序共享,你可以把要 share 的内容存到内存 ,文件或数据库中来实现。sqlite 和 mysql 都有支持内存存储的数据库,速度够快。


请问主进程和子进程共享变.
请问主进程和子进程共享变量,如何定义这个变量呢?能否给个例子?
大家看我这个程序怎么子进.
大家看我这个程序怎么子进程不能读取主进程的内容?
use Parallel::ForkManager;
use IPC::Shareable (':lock');

my $pm = new Parallel::ForkManager(3);

my $glue = 'data';
my %options = (
create => 'yes',
exclusive => 0,
mode => 0644,
# destroy => 'yes',
);
my %hash = ('a' => 1,'b' => 2,'c'=>3);
tie %hash, 'IPC::Shareable', $glue, { %options } or
die "server: tie failed\n";


foreach my $i (1 .. 10)
{
$pm->start and next;

my %hash;
my %sub_options = (
create => 0,
exclusive => 0,
mode => 0644,
destroy => 0,
);
tie %hash, 'IPC::Shareable', $glue, { %sub_options } or
die "client: tie failed\n";

print "output: $hash{'a'}\n";
$hash{'b'} = 4;
$pm->finish;
}
$pm->wait_all_children;

foreach my $key (keys(%hash))
{
print "$key=>$hash{$key}\n";
}
如何让所有进程共享%hash??
[quote]#!/usr/bin/perl -.
[quote]#!/usr/bin/perl -W
# cnhacktnt { at } perlchina.org
#

use strict;
use Storable qw/ freeze thaw /;
use IPC::ShareLite qw/LOCK_EX/;
use Parallel::ForkManager;

my $pm = new Parallel::ForkManager(3);
my %hash = ('a' => 1,'b' => 2,'c'=>3);

my $share = new IPC::ShareLite(
-key => 2006,
-create => 'yes',
-destroy => 'no'
) or die "Father: $!\n";

$share->store( freeze \%hash ); # 把 %hash 序列化后丢到共享里

foreach my $i (1 .. 6)
{
my $pid = $pm->start and next;
$share->lock(LOCK_EX) or die "kid($pid): $!\n"; # 加排他锁
my $hashref = thaw $share->fetch; # 取出共享里已经序列化的内容然后还原之
$hashref->{$$} = "kid of No.$$"; # 每个子进程都创建一个新的哈希条目
$share->store( freeze $hashref ); # 序列化后丢进共享里
$share->unlock or die "kid($pid): $!\n"; #解锁
$pm->finish;
}
$pm->wait_all_children;

%hash = %{ thaw $share->fetch };

foreach my $key (keys(%hash))
{
print "$key=>$hash{$key}\n";
}[/quote]

这样也是可行的 :-)




   

用IPC::Sharable模块不行吗?
dirsaw
nbL3PI <a href="http://umucxyvhctkh.com/">umucxyvhctkh</a>, [url=http://vgumsuozsiwm.com/]vgumsuozsiwm[/url], [link=http://byurrcnmcbeh.com/]byurrcnmcbeh[/link], http://wtlkdaenpgiy.com/

[img]http://rfjrlwpvyrfp.com/[/img]
[COLOR=BLUE]URL:[/COLOR][url]mnIsBcQsin[/url]