Perl线程学习指南

开发 架构
Perl线程与进程之间既有联系,又完全不同。简单地说,一个Perl线程必然属于某一个进程,而一个进程包含至少一个或者多个Perl线程。

本文和大家重点讨论一下Perl线程的概念,Perl线程是一个单一的执行流程,它是所有程序执行过程中最小的控制单位,即能被CPU所调度的最小任务单元。下面请看本文有关Perl线程概念详细介绍。

Perl线程学习指南

1:创建Perl线程

usethreads;my$thr=threads->new(\&sub1);subsub1{print"Inthethreads";}

也可以通过creat创建Perl线程并为Perl线程传递参数
new=create

my$thr=threads->create(\sub1,@paramlist);

2:等待Perl线程结束

usethreads;my($thr)=threads->new(\sub1);my@return=$thr->join();subsub1{return('FiFty',1,2);}

注意在这个例子中,sub1返回的是一个list,所以我们需要在定义Perl线程时候使用my($thr),这是给$thr一个list的上下文

3:忽略一个Perl线程

join做三件事:等待Perl线程推出,清理Perl线程以及返回Perl线程返回值。
如果你对Perl线程没啥兴趣,可以使用detach不管它,Perl会自动收拾这个进程

usethreadsmy$thr=threads->create(\&sub1);$thr->detach();sleep(15);subsub1{my$a=0;while(1){$a++;print"\$ais$a\n";sleep1;}}

sleep在这里的作用是使主进程多运行一些时间,否则主程序推出则Perl线程也会退出

我们也可以在sub里面退出Perl线程

subsub1{threads->detach();}

4:数据共享

usethreads;usethreads::shared;my$foo:shared=1;my$bar=1;my$thr=threads->create(sub{$foo++;$bar++}->join();print$foo,"\n";#2print$bar,"\n";#1

使用hash作为共享数据要注意的是

my$foo:shared;my$bar;my%foo;$foo->{bar}=\$bar#错误,必须使用共享数据的引用

5:使用数据共享带来的问题

考虑这样一个程序

usethreads;usethreads::shared;my$a:shared=1;my$thr1=threads->create(\&sub1);my$thr2=threads->create(\&sub2);$thr1->join;$thr2->join;print("$a\n");subsub1{my$foo=$a;$a=$foo+1;}subsub2{my$bar=$a;$a=$bar+1;}

这时候a的值是多少呢?sub1和sub2都对变亮a进行了修改,所以a的值是不确定的,可能是2也可能是3(我试了n次都是3)

6:同步和控制

访问控制:lock()

【编辑推荐】

  1. Perl线程队列和信号量概念解析
  2. 揭秘Perl线程历史
  3. 解析四大Perl操作符用法
  4. 追踪调查 看Perl线程如何消亡
  5. 学习笔记 深入剖析Perl线程的生命周期

 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-16 10:44:54

Perl数组

2010-07-21 11:04:44

Perl学习指南

2010-07-20 16:13:25

Perl线程

2009-11-11 14:32:33

路由协议介绍

2010-07-29 09:31:28

Flex编程模型

2010-07-16 15:29:02

Windows Pho

2011-08-23 10:29:13

LuaPlayer

2009-09-17 09:01:10

CCNA学习指南CCNA

2010-07-26 13:27:19

Perl多线程

2014-12-11 17:55:05

程序员

2024-10-15 08:10:49

NotebookLMYouTube视频AI

2010-06-11 14:21:53

2009-03-22 12:01:33

CCNA视频教程下载

2015-12-07 11:22:00

算法学习指南

2020-07-08 14:50:18

WebpackHMR前端

2009-11-12 17:20:17

2009-11-24 14:48:00

2011-08-17 14:07:43

IOS开发Quartz 2D

2015-09-24 14:04:59

机器学习

2010-07-20 13:32:25

Perl编程格式
点赞
收藏

51CTO技术栈公众号