微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perl Thread 错误避免

一个程序,如下功能,多线程同时下载多个图片并保存。

具体的多线程代码片段如下:

use Thread;
......
for my $list (@list){
  print "Download begin./n";
  my $thread = Thread->new(/&DownLoadFunction,$parameters);
  $thread->join();
}

运行这个程序你将发现,程序并没有并发的多线程,同时会出现一些意外情况,这个自己可以试试看,写一些简单的实现去测试并发现错误的类型。

对此,我们加以修改,如下:

use Thread;
......
my @threadlist;
for my $list (@list){
  print "Download begin./n";
  my $thread = Thread->new(/&DownLoadFunction,$parameters);
  push @threadlist,$thread;
}
foreach my $thread (@threadlist){
  $thread->join();
}


运行这个程序,则会按照我们预计的情况并发执行下载任务。

注意:正确的应该是先将所有的thread都放到一个list中,然后对他们进行join。

在Windows中,我们也可以使用fork来进行多线程的执行,与thread有相同的效果代码如下:

for my $list (@list){
  my $child = fork();
  if($child){
    # child > 0,so we are the parent
    print "Download begin./n";
  }else{
    # child = 0,handle child
    DownLoadFunction($parameters);
    exit 0;
  }
}

注意:必须使用exit 0 来推出线程,否则将会出错,具体的代码自己可以完成并测试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐