in reply to Re^6: Threads sharing global variable
in thread Threads sharing global variable
This is your most disingenuous post to date. (The latest in a very long line.)
Below is a simple experiment using your exact posted code from Re^2: Threads sharing global variable; that anyone running windows and a few versions of perl installed, can conduct for themselves in around five minutes, and see your dishonesty for themselves.
This is your code running under This is perl, v5.10.1 built for MSWin32-x64-multi-thread:
C:\test>type 1156698.pl use threads; use threads::shared; use Thread::Queue; my $a :shared = 0; my $q = Thread::Queue->new(); sub set_positive { lock $a; while (1) { cond_wait($a) while $a > 0; $a = int(rand() * 100) + 1; cond_signal($a); $q->enqueue($a); } } sub set_zero { lock $a; while (1) { cond_wait($a) while $a == 0; $a = 0; cond_signal($a); $q->enqueue($a); } } sub printer { while (1) { my ($v_a, $v_b) = $q->dequeue(2); print "At printer $v_a $v_b\n"; } } threads->create($_) for qw( set_positive $_->join for threads->list; C:\test>1156698 At printer 6 0 At printer 76 0 At printer 24 0 At printer 77 0 At printer 60 0 At printer 20 0 At printer 62 0 At printer 77 0 At printer 39 0 At printer 1 0 At printer 25 0 At printer 7 0 At printer 3 0 At printer 28 0 At printer 64 0 At printer 11 0 At printer 74 0 At printer 18 0 At printer 22 0 At printer 40 0 At printer 17 0 At printer 75 0 At printer 48 0 At printer 14 0 At printer 21 0 At printer 48 0 At printer 84 0 At printer 80 0 At printer 72 0 At printer 40 0 At printer 13 0 At printer 78 0 At printer 31 0 At printer 65 0 At printer 32 0 At printer 37 0 At printer 12 0 At printer 43 0 At printer 48 0 At printer 93 0 At printer 77 0 At printer 24 0 At printer 53 0 At printer 82 0 At printer 27 0 At printer 29 0 At printer 80 0 At printer 89 0 At printer 17 0 At printer 2 0 At printer 88 0 At printer 93 0 At printer 86 0 At printer 62 0 At printer 91 0 At printer 3 0 At printer 3 0 At printer 47 0 At printer 70 0 At printer 27 0 At printer 38 0 At printer 35 0 At printer 87 0 At printer 54 0 At printer 62 0 At printer 45 0 At printer 35 0 At printer 2 0 At printer 69 0 At printer 90 0 At printer 44 0 At printer 21 0 At printer 39 0 At printer 96 0 At printer 89 0 At printer 82 0 At printer 26 0 At printer 50 0 At printer 2 0 At printer 52 0 At printer 97 0 At printer 2 0 At printer 41 0 At printer 91 0 At printer 99 0 At printer 67 0 At printer 28 0 At printer 67 0 At printer 85 0 At printer 72 0 At printer 94 0 At printer 23 0 At printer 73 0 At printer 79 0 At printer 47 0 At printer 89 0 At printer 68 0 At printer 34 0 At printer 7 0 At printer 79 0 At printer 32 0 At printer 80 0 At printer 23 0 At printer 73 0 At printer 15 0 At printer 64 0 At printer 10 0 At printer 4 0 At printer 37 0 At printer 4 0 At printer 16 0 At printer 62 0 At printer 52 0 At printer 23 0 At printer 85 0 At printer 44 0 At printer 55 0 At printer 22 0 At printer 89 0 At printer 43 0 At printer 82 0 At printer 9 0 At printer 15 0 At printer 15 0 At printer 61 0 At printer 47 0 At printer 87 0 At printer 22 0 At printer 60 0 At printer 27 0 At printer 86 0 At printer 81 0 At printer 96 0 At printer 58 0 At printer 72 0 At printer 14 0 At printer 38 0 At printer 57 0 At printer 56 0 At printer 47 0 At printer 89 0 At printer 31 0 At printer 28 0 At printer 35 0 At printer 62 0 At printer 50 0 At printer 92 0 At printer 65 0 At printer 41 0 At printer 85 0 At printer 19 0 At printer 21 0 At printer 44 0 At printer 28 0 At printer 58 0 At printer 53 0 At printer 75 0 At printer 43 0 At printer 18 0 At printer 45 0 At printer 88 0 At printer 98 0 At printer 74 0 At printer 19 0 At printer 43 0 At printer 98 0 At printer 93 0 At printer 59 0 At printer 82 0 At printer 80 0 At printer 37 0 At printer 12 0 At printer 100 0 At printer 99 0 At printer 55 0 At printer 38 0 At printer 49 0 At printer 46 0 At printer 99 0 At printer 69 0 At printer 37 0 At printer 47 0 At printer 79 0 At printer 45 0 At printer 66 0 At printer 71 0 At printer 13 0 At printer 90 0 At printer 80 0 At printer 2 0 At printer 69 0 At printer 3 0 At printer 43 0 At printer 98 0 At printer 43 0 At printer 12 0 At printer 49 0 At printer 3 0 At printer 3 0 At printer 80 0 At printer 60 0 At printer 18 0 At printer 25 0 At printer 4 0 At printer 80 0 At printer 6 0 At printer 33 0 At printer 93 0 At printer 73 0 At printer 52 0 At printer 7 0 At printer 74 0 At printer 11 0 At printer 22 0 At printer 43 0 At printer 13 0 At printer 82 0 At printer 62 0 At printer 37 0 At printer 84 0 At printer 29 0 At printer 82 0 At printer 80 0 At printer 92 0 At printer 56 0 At printer 59 0 At printer 26 0 At printer 79 0 At printer 77 0 At printer 4 0 At printer 38 0 At printer 1 0 At printer 26 0 At printer 31 0 At printer 59 0 At printer 33 0 At printer 29 0 At printer 76 0 At printer 11 0 At printer 74 0 At printer 37 0 At printer 87 0 At printer 84 0 At printer 3 0 At printer 25 0 At printer 56 0 At printer 4 0 At printer 74 0 At printer 66 0 At printer 2 0 At printer 51 0 At printer 94 0 At printer 69 0 At printer 74 0 At printer 10 0 At printer 65 0 At printer 100 0 At printer 87 0 At printer 24 0 At printer 43 0 At printer 83 0 At printer 58 0 At printer 46 0 At printer 97 0 At printer 76 0 At printer 62 0 At printer 44 0 At printer 9 0 At printer 37 0 At printer 63 0 At printer 56 0 At printer 8 0 At printer 83 0 At printer 49 0 At printer 63 0 At printer 78 0 At printer 29 0 At printer 21 0 At printer 70 0 At printer 32 0 At printer 34 0 At printer 71 0 At printer 43 0 At printer 83 0 At printer 34 0 At printer 95 0 At printer 33 0 Terminating on signal SIGINT(2)
Summary: It produces 287(*) lines of output before hanging. (Varies from run to run; but that's typical.)
This is your code running under This is perl 5, version 18, subversion 4 (v5.18.4) built for MSWin32-x64-multi-thread:
Summary: It produces 817* lines of output. (Usually runs a little longer than under 5.10, but of 20 runs this was the most output before hanging.)
This is your code running under This is perl 5, version 22, subversion 0 (v5.22.0) built for MSWin32-x64-multi-thread:
C:\test>\Perl22\bin\perl.exe 1156698.pl At printer 58 0 At printer 36 0 At printer 89 0 At printer 92 0 At printer 57 0 At printer 70 0 At printer 75 0 At printer 41 0 At printer 18 0 At printer 91 0 At printer 64 0 At printer 71 0 At printer 46 0 At printer 66 0 At printer 19 0 At printer 73 0 At printer 67 0 At printer 41 0 At printer 83 0 At printer 70 0 At printer 30 0 At printer 91 0 At printer 77 0 At printer 55 0 At printer 73 0 At printer 55 0 At printer 27 0 At printer 33 0 At printer 38 0 At printer 94 0 At printer 13 0 At printer 26 0 At printer 17 0 At printer 20 0 At printer 45 0 At printer 32 0 At printer 57 0 At printer 22 0 At printer 46 0 At printer 3 0 At printer 15 0 At printer 18 0 At printer 5 0 At printer 90 0 At printer 72 0 At printer 10 0 At printer 19 0 At printer 88 0 At printer 30 0 At printer 84 0 At printer 83 0 At printer 3 0 At printer 83 0 At printer 15 0 At printer 52 0 At printer 28 0 At printer 75 0 At printer 51 0 At printer 80 0 At printer 43 0 At printer 47 0 At printer 82 0 At printer 25 0 At printer 21 0 At printer 18 0 At printer 40 0 At printer 7 0 At printer 13 0 At printer 57 0 At printer 36 0 At printer 38 0 At printer 75 0 At printer 51 0 At printer 82 0 At printer 11 0 At printer 48 0 At printer 14 0 At printer 4 0 At printer 51 0 At printer 82 0 At printer 47 0 At printer 66 0 At printer 8 0 At printer 22 0 At printer 94 0 At printer 42 0 At printer 83 0 At printer 78 0 At printer 80 0 At printer 62 0 At printer 69 0 At printer 60 0 At printer 34 0 At printer 25 0 At printer 40 0 At printer 72 0 At printer 11 0 At printer 91 0 At printer 9 0 At printer 45 0 At printer 7 0 At printer 65 0 At printer 97 0 At printer 75 0 At printer 3 0 At printer 73 0 At printer 34 0 At printer 26 0 At printer 30 0 At printer 67 0 At printer 42 0 At printer 27 0 At printer 3 0 At printer 73 0 At printer 67 0 At printer 42 0 At printer 100 0 At printer 96 0 At printer 45 0 At printer 55 0 At printer 92 0 At printer 13 0 At printer 80 0 At printer 20 0 At printer 1 0 At printer 38 0 At printer 26 0 At printer 68 0 At printer 55 0 At printer 19 0 At printer 72 0 At printer 78 0 At printer 48 0 At printer 47 0 At printer 97 0 At printer 45 0 At printer 59 0 At printer 3 0 At printer 66 0 At printer 49 0 At printer 79 0 At printer 31 0 At printer 92 0 At printer 32 0 At printer 91 0 At printer 29 0 At printer 44 0 At printer 7 0 At printer 5 0 At printer 22 0 At printer 23 0 At printer 64 0 At printer 62 0 At printer 3 0 At printer 100 0 At printer 64 0 At printer 39 0 At printer 52 0 At printer 71 0 At printer 26 0 At printer 5 0 At printer 32 0 At printer 64 0 At printer 1 0 At printer 29 0 At printer 44 0 At printer 95 0 At printer 31 0 At printer 72 0 At printer 32 0 At printer 63 0 At printer 45 0 At printer 4 0 At printer 36 0 At printer 18 0 At printer 90 0 At printer 63 0 At printer 48 0 At printer 61 0 At printer 47 0 At printer 10 0 At printer 8 0 At printer 68 0 At printer 82 0 At printer 79 0 At printer 25 0 At printer 85 0 At printer 64 0 At printer 6 0 At printer 42 0 At printer 58 0 At printer 70 0 At printer 87 0 At printer 7 0 At printer 41 0 At printer 75 0 At printer 26 0 At printer 62 0 At printer 43 0 At printer 45 0 At printer 45 0 At printer 84 0 At printer 24 0 At printer 34 0 At printer 78 0 At printer 18 0 At printer 23 0 At printer 12 0 At printer 83 0 At printer 96 0 At printer 54 0 At printer 91 0 At printer 84 0 At printer 29 0 At printer 38 0 At printer 78 0 At printer 23 0 At printer 96 0 At printer 98 0 At printer 98 0 At printer 7 0 At printer 99 0 At printer 93 0 At printer 46 0 At printer 96 0 At printer 26 0 At printer 9 0 At printer 38 0 At printer 14 0 At printer 28 0 At printer 21 0 At printer 60 0 At printer 15 0 At printer 20 0 At printer 51 0 At printer 17 0 At printer 69 0 At printer 67 0 At printer 42 0 At printer 21 0 At printer 31 0 At printer 24 0 At printer 97 0 At printer 86 0 At printer 11 0 At printer 58 0 At printer 76 0 At printer 1 0 At printer 33 0 At printer 79 0 At printer 65 0 At printer 59 0 At printer 14 0 At printer 81 0 At printer 28 0 At printer 100 0 At printer 62 0 At printer 10 0 At printer 77 0 At printer 48 0 At printer 59 0 At printer 50 0 At printer 18 0 At printer 96 0 At printer 75 0 At printer 5 0 At printer 55 0 At printer 5 0 At printer 84 0 At printer 81 0 At printer 7 0 At printer 36 0 At printer 8 0 At printer 6 0 At printer 35 0 At printer 63 0 At printer 76 0 At printer 98 0 At printer 66 0 At printer 67 0 At printer 46 0 At printer 18 0 At printer 94 0 At printer 16 0 At printer 85 0 At printer 89 0 At printer 34 0 At printer 82 0 At printer 63 0 At printer 82 0 At printer 30 0 At printer 92 0 At printer 58 0 At printer 29 0 At printer 38 0 At printer 31 0 At printer 79 0 At printer 36 0 At printer 61 0 At printer 33 0 At printer 28 0 At printer 85 0 At printer 92 0 At printer 7 0 At printer 98 0 At printer 44 0 At printer 71 0 At printer 15 0 At printer 27 0 At printer 78 0 At printer 39 0 At printer 17 0 At printer 37 0 At printer 58 0 At printer 18 0 At printer 99 0 At printer 29 0 At printer 32 0 At printer 72 0 At printer 22 0 At printer 91 0 At printer 19 0 At printer 95 0 At printer 35 0 At printer 92 0 At printer 61 0 At printer 54 0 At printer 7 0 At printer 93 0 At printer 56 0 At printer 46 0 At printer 23 0 At printer 30 0 At printer 54 0 At printer 74 0 At printer 41 0 At printer 22 0 At printer 85 0 At printer 57 0 At printer 21 0 At printer 83 0 At printer 78 0 At printer 55 0 At printer 76 0 At printer 35 0 At printer 78 0 At printer 100 0 At printer 44 0 At printer 65 0 At printer 21 0 At printer 16 0 At printer 25 0 At printer 65 0 At printer 51 0 At printer 22 0 At printer 42 0 At printer 35 0 At printer 84 0 At printer 89 0 At printer 63 0 At printer 32 0 At printer 31 0 At printer 73 0 At printer 32 0 At printer 2 0 At printer 84 0 At printer 74 0 At printer 85 0 At printer 56 0 At printer 1 0 At printer 42 0 At printer 81 0 At printer 8 0 At printer 11 0 At printer 23 0 At printer 78 0 At printer 52 0 At printer 14 0 At printer 60 0 At printer 62 0 At printer 27 0 At printer 46 0 At printer 73 0 At printer 46 0 At printer 10 0 At printer 34 0 At printer 55 0 At printer 28 0 At printer 77 0 At printer 20 0 At printer 38 0 At printer 57 0 At printer 39 0 At printer 18 0 At printer 74 0 At printer 43 0 At printer 53 0 At printer 88 0 At printer 21 0 At printer 96 0 At printer 40 0 At printer 81 0 At printer 25 0 At printer 94 0 At printer 35 0 At printer 33 0 At printer 12 0 At printer 95 0 At printer 69 0 At printer 97 0 At printer 64 0 At printer 68 0 At printer 66 0 At printer 80 0 At printer 49 0 At printer 75 0 At printer 67 0 At printer 73 0 At printer 31 0 At printer 88 0 At printer 93 0 At printer 61 0 At printer 25 0 At printer 24 0 At printer 51 0 At printer 94 0 At printer 14 0 At printer 49 0 At printer 39 0 At printer 30 0 At printer 87 0 At printer 66 0 At printer 50 0 At printer 89 0 At printer 59 0 At printer 51 0 At printer 59 0 At printer 22 0 At printer 94 0 At printer 29 0 At printer 45 0 At printer 70 0 At printer 39 0 At printer 26 0 At printer 95 0 At printer 70 0 At printer 17 0 At printer 9 0 At printer 75 0 At printer 23 0 At printer 59 0 At printer 54 0 At printer 34 0 At printer 46 0 At printer 1 0 At printer 10 0 At printer 7 0 At printer 73 0 At printer 8 0 At printer 76 0 At printer 72 0 At printer 75 0 At printer 49 0 At printer 42 0 At printer 60 0 At printer 29 0 At printer 68 0 At printer 76 0 At printer 73 0 At printer 68 0 At printer 75 0 At printer 18 0 At printer 87 0 At printer 31 0 At printer 47 0 At printer 63 0 At printer 35 0 At printer 58 0 Terminating on signal SIGINT(2)
Summary: It produces 479* lines of output before hanging! (After 10 runs the average was around 700 lines, but that included one run that gave nearly 2000 lines and another that produced 17.)
I'm also now firmly convinced that it will hang everywhere -- even under Linux -- if left running long enough, because a signal will eventually be missed and it will deadlock. This is inevitable; but is an exercise for someone else to (dis)prove.
|
|---|