温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Perl线程的示例分析

发布时间:2021-12-06 10:30:00 来源:亿速云 阅读:119 作者:小新 栏目:开发技术

小编给大家分享一下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()

看完了这篇文章,相信你对“Perl线程的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI