返回列表 回复 发帖

[转帖]一个多线程,以及对数组的互斥操作的测试程序

  1. #!/usr/bin/perl
  2. # 一个多线程,以及对数组的互斥操作的测试程序  战鹰
  3. use threads;
  4. use threads::shared;
  5. my @scalar;
  6. share(@scalar);#让该数组在线程间共享
  7. sub start_thread_1
  8. {
  9.    #程序主线程函数
  10.    my $id=shift;
  11.    for(1..50)
  12.    {
  13.       if($locked==0)
  14.       {
  15.          #这个条件判断没有实际用途,只不过是为了让Perl在if条件内的过程运行结束以后打开对共享数组的琐定
  16.          #您也可以注销这个条件判断,但您将得到一个完全不同的运行结果
  17.          lock(@scalar);#琐定共享数组
  18.          my $sc=rand(10);#获得一个随机数
  19.          push(@scalar,$sc);#将该随机数压入共享数组
  20.          print "$id:$sc\n";
  21.          cond_signal @scalar;#从阻塞队列中释放一个线程
  22.       }
  23.       sleep(1);
  24.    }
  25.    cond_signal @scalar;
  26. }
  27. sub start_thread_2
  28. {
  29.    my $id=shift;
  30.    while(1)
  31.    {
  32.       #进行无限循环,正常的程序中应尽量避免这种循环,否则线程将不能正常的结束
  33.       if(@scalar>0)
  34.       {
  35.          #如果共享数组内的元素个数大于0,则从中取出一个元素
  36.          lock(@scalar);
  37.          my $sc=shift @scalar;
  38.          print "$id:$sc\n";
  39.       }
  40.       else
  41.       {
  42.          #如果共享数组内的元素个数等于0,则将线程阻塞,直到主线程将其从阻塞队列中释放出来
  43.          lock(@scalar);
  44.          cond_wait @scalar;
  45.       }
  46.    }
  47. }
  48. #创建三个子线程
  49. my $thread_2 = threads->create("start_thread_2",1);
  50. my $thread_3 = threads->create("start_thread_2",2);
  51. my $thread_4 = threads->create("start_thread_2",3);
  52. #运行主线程
  53. start_thread_1(';main';);
复制代码

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表