免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2541 | 回复: 1
打印 上一主题 下一主题

请教一个用DB_File实现进程间数据共享的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-06 08:35 |只看该作者 |倒序浏览
本帖最后由 hhheng 于 2014-07-06 08:37 编辑

尝试用DB_File实现进程间的数据共享,写出如下的测试程序:

my @num;
my $f = 'test';
unlink $f;

$x = tie @num, 'DB_File', $f, O_RDWR|O_CREAT, 0666, $DB_RECNO
        or die "Failed to open the file, $!";

for($i=0; $i<20; $i++){
    $num[$i] = int(rand(50));
}

print "Original Array: @num <br>";

for($i=0; $i<3; $i++){                  #3个进程
    if(fork()){
        sleep(2);
    }else{
        pop @num;
        print "After child $$: @num <br />";
        exit(1);
    }
}

waitpid(-1, WNOHANG);

print "After 3 forks: @num <br />";

undef $x;
untie @num;

我希望的结果是每一个子进程能弹出一个元素,3个进程弹出3个元素,但测试结果如下:

Original Array: 48 33 45 40 14 9 7 5 39 48 28 47 44 0 32 20 33 40 5 15
After 25407: 48 33 45 40 14 9 7 5 39 48 28 47 44 0 32 20 33 40 5
After 25481: 48 33 45 40 14 9 7 5 39 48 28 47 44 0 32 20 33 40 5
After 25509: 48 33 45 40 14 9 7 5 39 48 28 47 44 0 32 20 33 40 5
After 3 forks: 48 33 45 40 14 9 7 5 39 48 28 47 44 0 32 20 33 40 5 15

我希望看到的结果是after 25481后最后一个元素5已经没有了,after 25509后40这个元素没有了,在经过3个fork后,只剩下17个元素。

但测试结果却与设计不同,请那位高手指教一下问题出在那儿。

论坛徽章:
2
天蝎座
日期:2013-09-17 18:34:58射手座
日期:2013-09-25 10:46:41
2 [报告]
发表于 2014-07-11 23:57 |只看该作者
本帖最后由 os4fun 于 2014-07-12 00:04 编辑

你需要lock,参考它的lock部分
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP