perl实现多线程

perl实现多线程,第1张

概述#用perl实现多线程(转)  use strict;  use English '-no_match_vars';  use Errno qw(EAGAIN);  use threads;  use threads::shared;  my $items = 20; #需要处理的任务数  my $maxchild = 65; #最多线程数(1-65),perl最多允许64个子线程,加上主线程因此 #用perl实现多线程(转)  use strict;  use English '-no_match_vars';  use Errno qw(EAGAIN);  use threads;  use threads::shared;  my $items = 20; #需要处理的任务数  my $maxchild = 65; #最多线程数(1-65),perl最多允许64个子线程,加上主线程因此最多65个线程  my $pID;  my $forks: shared = 1; #当前线程数  print "startn";  my $item: shared = 0; #当前处理任务序号,起始序号为0  my $myID = 1; #当前线程序号  my $main_pID = $PID;  sub subprocess;  #最多$maxchild个线程完成$items项任务  while ($item<$items) {  FORK: {  #select undef,undef,0.1;  if (($forks<$maxchild) && ($PID == $main_pID)) { #必须只允许主线程产生子线程  if ($pID = fork) { #主线程处理  $| = 1;  $forks++;  $myID++;  print "Starting Sub_Process:($pID/$PID)n";  }elsif (defined $pID) { #子线程处理  $| = 1;  last unless (subprocess);  }elsif ($! == EAGAIN) { #子线程未创建成功  print "$!$forksn";  # EAGAIN is the supposedly recoverable fork error  sleep 5;  redo FORK;  }else { #不能创建子线程  # weird fork error  dIE "Can't fork: $!n";  }  }else { #所有线程处理  last unless (subprocess);  }  }  }  sub subprocess {  #由于$item是共享的且每个线程都能对其进行修改,因此为了保证当前线程任务序号的正确,必须将$item转入局部变量存储  my $sID; #存储线程当前处理任务序号。  {  lock($item);  $sID = $item;  $item++ if ($item < $items);  }  if ($sID < $items) { #任务处理  print "Child process($PID/$myID) start :$sID/$forksn";  print "$sIDn";  sleep 1;  print "Child process($PID/$myID) end :$sID/$forksn";  return 1;  }elsif ($main_pID == $PID) { #主线程结束  wait; #结束前等待所有子线程结束  print "Main process $$/$myID endn";  exit 1;  }else { #子线程结束  print "Child process($PID/$myID) exit :$sID/$forksn";  exit 1;  }  } 总结

以上是内存溢出为你收集整理的perl实现多线程全部内容,希望文章能够帮你解决perl实现多线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1294469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存