- 论坛徽章:
- 0
|
本帖最后由 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个元素。
但测试结果却与设计不同,请那位高手指教一下问题出在那儿。 |
|