[DRAFT] Encode-Tcl.t
[p5sagit/p5-mst-13.2.git] / ext / Thread / sync.tx
1 BEGIN {
2     eval { require Config; import Config };
3     if ($@) {
4         print "1..0 # Skip: no Config\n";
5         exit(0);
6     }
7     if ($Config{extensions} !~ /\bThread\b/) {
8         print "1..0 # Skip: no use5005threads\n";
9         exit(0);
10     }
11 }
12
13 use Thread;
14
15 $level = 0;
16
17 sub single_file : locked {
18     my $arg = shift;
19     $level++;
20     print "Level $level for $arg\n";
21     print "(something is wrong)\n" if $level < 0 || $level > 1;
22     sleep 1;
23     $level--;
24     print "Back to level $level\n";
25 }
26
27 sub start_bar {
28     my $i;
29     print "start bar\n";
30     for $i (1..3) {
31         print "bar $i\n";
32         single_file("bar $i");
33         sleep 1 if rand > 0.5;
34     }
35     print "end bar\n";
36     return 1;
37 }
38
39 sub start_foo {
40     my $i;
41     print "start foo\n";
42     for $i (1..3) {
43         print "foo $i\n";
44         single_file("foo $i");
45         sleep 1 if rand > 0.5;
46     }
47     print "end foo\n";
48     return 1;
49 }
50
51 sub start_baz {
52     my $i;
53     print "start baz\n";
54     for $i (1..3) {
55         print "baz $i\n";
56         single_file("baz $i");
57         sleep 1 if rand > 0.5;
58     }
59     print "end baz\n";
60     return 1;
61 }
62
63 $| = 1;
64 srand($$^$^T);
65
66 $foo = new Thread \&start_foo;
67 $bar = new Thread \&start_bar;
68 $baz = new Thread \&start_baz;
69 $foo->join();
70 $bar->join();
71 $baz->join();
72 print "main: threads finished, exiting\n";