标题:
[转帖]一个多线程,以及对数组的互斥操作的测试程序
[打印本页]
作者:
cnangel
时间:
2004-12-7 18:42
标题:
[转帖]一个多线程,以及对数组的互斥操作的测试程序
#!/usr/bin/perl
# 一个多线程,以及对数组的互斥操作的测试程序 战鹰
use threads;
use threads::shared;
my @scalar;
share(@scalar);#让该数组在线程间共享
sub start_thread_1
{
#程序主线程函数
my $id=shift;
for(1..50)
{
if($locked==0)
{
#这个条件判断没有实际用途,只不过是为了让Perl在if条件内的过程运行结束以后打开对共享数组的琐定
#您也可以注销这个条件判断,但您将得到一个完全不同的运行结果
lock(@scalar);#琐定共享数组
my $sc=rand(10);#获得一个随机数
push(@scalar,$sc);#将该随机数压入共享数组
print "$id:$sc\n";
cond_signal @scalar;#从阻塞队列中释放一个线程
}
sleep(1);
}
cond_signal @scalar;
}
sub start_thread_2
{
my $id=shift;
while(1)
{
#进行无限循环,正常的程序中应尽量避免这种循环,否则线程将不能正常的结束
if(@scalar>0)
{
#如果共享数组内的元素个数大于0,则从中取出一个元素
lock(@scalar);
my $sc=shift @scalar;
print "$id:$sc\n";
}
else
{
#如果共享数组内的元素个数等于0,则将线程阻塞,直到主线程将其从阻塞队列中释放出来
lock(@scalar);
cond_wait @scalar;
}
}
}
#创建三个子线程
my $thread_2 = threads->create("start_thread_2",1);
my $thread_3 = threads->create("start_thread_2",2);
my $thread_4 = threads->create("start_thread_2",3);
#运行主线程
start_thread_1(';main';);
复制代码
欢迎光临 星星博客 (http://commerce.huhoo.net/)
Powered by Discuz! 7.0.0