]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Improve scheduling for the parallel loading test
authorVincent Pit <vince@profvince.com>
Tue, 31 Mar 2015 17:14:53 +0000 (14:14 -0300)
committerVincent Pit <vince@profvince.com>
Tue, 31 Mar 2015 17:14:53 +0000 (14:14 -0300)
t/09-load-threads.t

index 88d06c57aa6bbe190a9a462f1940d731f64ddbe1..f9a03ac2987fd89aa345fc11dfff8f62adc7257e 100644 (file)
@@ -169,16 +169,24 @@ is_loaded 0, 'main body, after nested loadings';
 use threads;
 use threads::shared;
 
-my @locks = (1) x 5;
-share($_) for @locks;
+my @locks_down = (1) x 5;
+my @locks_up   = (0) x scalar @locks_down;
+share($_) for @locks_down, @locks_up;
+
+my $peers = 2;
 
 sub sync_master {
  my ($id) = @_;
 
  {
-  lock $locks[$id];
-  $locks[$id] = 0;
-  cond_broadcast $locks[$id];
+  lock $locks_down[$id];
+  $locks_down[$id] = 0;
+  cond_broadcast $locks_down[$id];
+ }
+
+ {
+  lock $locks_up[$id];
+  cond_wait $locks_up[$id] until $locks_up[$id] == $peers;
  }
 }
 
@@ -186,8 +194,14 @@ sub sync_slave {
  my ($id) = @_;
 
  {
-  lock $locks[$id];
-  cond_wait $locks[$id] until $locks[$id] == 0;
+  lock $locks_down[$id];
+  cond_wait $locks_down[$id] until $locks_down[$id] == 0;
+ }
+
+ {
+  lock $locks_up[$id];
+  $locks_up[$id]++;
+  cond_signal $locks_up[$id];
  }
 }
 
@@ -232,7 +246,7 @@ SKIP: {
   return;
  });
 
- sync_master($_) for 0 .. $#locks;
+ sync_master($_) for 0 .. $#locks_down;
 
  $thr1->join;
  if (my $err = $thr1->error) {