Line | |
---|
1 | BEGIN {
|
---|
2 | eval { require Config; import Config };
|
---|
3 | if ($@) {
|
---|
4 | print "1..0 # Skip: no Config\n";
|
---|
5 | exit(0);
|
---|
6 | }
|
---|
7 | }
|
---|
8 |
|
---|
9 | use Thread;
|
---|
10 |
|
---|
11 | $level = 0;
|
---|
12 |
|
---|
13 | sub worker
|
---|
14 | {
|
---|
15 | my $num = shift;
|
---|
16 | my $i;
|
---|
17 | print "thread $num starting\n";
|
---|
18 | for ($i = 1; $i <= 20; $i++) {
|
---|
19 | print "thread $num iteration $i\n";
|
---|
20 | select(undef, undef, undef, rand(10)/100);
|
---|
21 | {
|
---|
22 | lock($lock);
|
---|
23 | warn "thread $num saw non-zero level = $level\n" if $level;
|
---|
24 | $level++;
|
---|
25 | print "thread $num has lock\n";
|
---|
26 | select(undef, undef, undef, rand(10)/100);
|
---|
27 | $level--;
|
---|
28 | }
|
---|
29 | print "thread $num released lock\n";
|
---|
30 | }
|
---|
31 | }
|
---|
32 |
|
---|
33 | for ($t = 1; $t <= 5; $t++) {
|
---|
34 | new Thread \&worker, $t;
|
---|
35 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.