免费注册 查看新帖 |

Chinaunix

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

请教,自己写的一个Perl多线程例子,请高人指点,是否存在问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-15 14:30 |只看该作者 |倒序浏览
#!/usr/bin/perl

use threads;
use threads::shared;
use Fcntl qw/:flock/;

my @threads;

my $item:shared = 0;

print time() . "\n";

#20个任务,10线程跑
for(my $i=0; $i<20; $i++) {
    log2File ("---start one mission --$i--\n");
    my $t = int(rand()*30);
    if ($i == 12){
        $t = 30;
    }
    #如果线程超过10个在运行,则等待
    if ($item < 10){
        $threads[$i]=threads->new(\&start_thread,$i,$t);
        $threads[$i]->detach();
        $item ++;
    }
    else{
        while ($item >= 10){
            log2File ("---超过10个线程在运行\n");
            sleep 5;
        }
    }
}

while ($item > 0){
    log2File ("---$item------------------------------\n");
    sleep 5;
}

log2File ("---$item thread run.............\n");
log2File ("\n");

sub start_thread{
    my ($id,$t)=@_;
    sleep $t;   
    log2File ("---$id thread already sleep $t\n");
    {
        lock($item);
        $item --;
        log2File ("---$id thread item - 1  ...... $item\n");
    }   
}

sub log2File{
    my ($event) = @_;
    my $time = `date +"%Y-%m-%d %H:%M:%S"`;
    my $date = `date +"%Y%m%d"`;
    chomp($time);
    chomp($date);
    my $log_file = "./Log_" . $date . ".log";
    open LOGFILE, ">>$log_file" or die "can't open $log_file!\n";
    flock(LOGFILE, LOCK_EX) or die "Can't lock $log_file!\n";
    print LOGFILE ("$time-----$event \n");
    close LOGFILE;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP