PERL实现多线程的一些demo程序

coding

以前学perl时候的一些笔记。主要是perl来写多线程的程序,整理一下

1


#!/bin/perl

use threads;

use threads::shared; # 涉及到一些进程间变量的共享,用这个模块

my $process = 4;

my $child_num = 0;

print $threads::VERSION.chr(10);

while (1) {

if ($child_num < $process){

my $params = $child_num.':..........';

my $thr = threads->create(\&start_thread, $params);

$child_num ++;

}

#foreach my $t(threads->list()){

foreach my $t(threads->list(threads::joinable)){

$t->join();

}

# all tasks done and no running child, then exit

if ($child_num==4){

exit;

}

}

sub start_thread(){

# do actually task here

my $param = shift;

print $param.chr(10);

}


2


my $maxchild=10;

for($i=0;$i<=$maxchild-1;$i++)

{

my $child=fork();

if($child)

{ # child >; 0, so we're the parent

warn "launching child $child\n";

}else{

do_child($i); # child handles

exit 0; # child is done

}

}

exit;

sub do_child

{

my $child_number=shift(@_);

print("child ,$child_number \n");

}



use Thread;

#use threads::shared;

my @threads;

open(MHO,$mhofile);

my @mholist=<MHO>;

foreach my $mho (@mholist) {

next unless defined $mho;

print "start one thread";

$threads[$tempcount]=Thread->new(\&start_thread,$mho);

$tempcount++;

}

foreach my $thread (@threads) {

$thread->join();

}

sub start_thread{

my ($infomho)=@_;

print "in thread $infomho";

sleep 20;

}


4

#!/bin/perl

use strict;

use threads;

use Cwd;

use POSIX qw(strftime);

################################################################################

# 函数名: count

# 函数描述: 数数

# 输入: name 随意输入一个名字

# 输出: 无

# 调用:

# 被调用:

# 返回:

################################################################################

sub count

{

my ($name) = @_;

my $current_time = strftime "%Y-%m-%d %H:%M:%S", localtime;

for ($i = 0; $i <= 10000; $i++)

{

print "$current_time $name $i";

}

}

创建第一批线程

my $thread_1_01 = threads->create('count', Thread_1);

my $thread_1_02 = threads->create('count', Thread_2);

my $thread_1_03 = threads->create('count', Thread_3);

my $thread_1_04 = threads->create('count', Thread_4);

# 等待第一批线程结束完成

$thread_1_01->join();

$thread_1_02->join();

$thread_1_03->join();

$thread_1_04->join();

# 创建第二批线程

my $thread_2_01 = threads->create('count', Thread_5);

my $thread_2_02 = threads->create('count', Thread_6);

my $thread_2_03 = threads->create('count', Thread_7);

# 等待第二批线程结束完成

$thread_2_01->join();

$thread_2_02->join();

$thread_2_03->join();


参考文档:

http://www.cnblogs.com/joechen/archive/2009/04/27/1444569.html

http://www.cnblogs.com/joechen/archive/2009/04/27/1444602.html

5 perl语言last和next命令



#last 退出循环陈述

for($i=1;$i<=10;$i++)

{

last if ($i==5); #如果$i等于5的话就退出for循环

print"$i\n";

}

#会把1到4之间的数值显示出来.

#next 到循环的下一个陈述

for($i<=10;$i++)

{

#如果是2的倍数的话,就到循环的下一个陈述

next if($i%2)==0)

print"$i是一个奇数!\n";

}

#会把1以10之间的奇数显示出来。

参考文档:http://hi.baidu.com/619195553dream/item/6ac361a8d4c137921510739f

总结一下,这个博客是以前做一个perl多线程时候积累的一些博客。收藏一下。^_^



以上是 PERL实现多线程的一些demo程序 的全部内容, 来源链接: utcz.com/z/508796.html

回到顶部