home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / ext / Thread / sync.t < prev    next >
Text File  |  1999-10-09  |  1KB  |  61 lines

  1. use Thread;
  2.  
  3. $level = 0;
  4.  
  5. sub single_file : locked {
  6.     my $arg = shift;
  7.     $level++;
  8.     print "Level $level for $arg\n";
  9.     print "(something is wrong)\n" if $level < 0 || $level > 1;
  10.     sleep 1;
  11.     $level--;
  12.     print "Back to level $level\n";
  13. }
  14.  
  15. sub start_bar {
  16.     my $i;
  17.     print "start bar\n";
  18.     for $i (1..3) {
  19.     print "bar $i\n";
  20.     single_file("bar $i");
  21.     sleep 1 if rand > 0.5;
  22.     }
  23.     print "end bar\n";
  24.     return 1;
  25. }
  26.  
  27. sub start_foo {
  28.     my $i;
  29.     print "start foo\n";
  30.     for $i (1..3) {
  31.     print "foo $i\n";
  32.     single_file("foo $i");
  33.     sleep 1 if rand > 0.5;
  34.     }
  35.     print "end foo\n";
  36.     return 1;
  37. }
  38.  
  39. sub start_baz {
  40.     my $i;
  41.     print "start baz\n";
  42.     for $i (1..3) {
  43.     print "baz $i\n";
  44.     single_file("baz $i");
  45.     sleep 1 if rand > 0.5;
  46.     }
  47.     print "end baz\n";
  48.     return 1;
  49. }
  50.  
  51. $| = 1;
  52. srand($$^$^T);
  53.  
  54. $foo = new Thread \&start_foo;
  55. $bar = new Thread \&start_bar;
  56. $baz = new Thread \&start_baz;
  57. $foo->join();
  58. $bar->join();
  59. $baz->join();
  60. print "main: threads finished, exiting\n";
  61.