chiark / gitweb /
memoise edge_end2 now performance is good
[moebius2.git] / parallel.c
index badc75d79b6f4a42bd4ed40b3dcaf69738bb8cc1..f5841eeb21040f7394a833b25d66399cd8bd23e6 100644 (file)
@@ -54,7 +54,7 @@ void inparallel(const struct Vertices *vertices,
 
   int s, r;
 
-  if (!threads_started) {
+  if (NSECTIONS>1 && !threads_started) {
     r= pthread_barrier_init(&threads_barrier, 0, NSECTIONS);
     if (r) { errno=r; diee("pthread_barrier_init"); }
 
@@ -62,6 +62,7 @@ void inparallel(const struct Vertices *vertices,
       r= pthread_create(&threads[s].thread,0,routine,&threads[s]);
       if (r) { errno=r; diee("pthread_create"); }
     }
+    threads_started= 1;
   }    
 
   for (s=0; s<NSECTIONS-1; s++) {
@@ -81,8 +82,10 @@ void inparallel(const struct Vertices *vertices,
 }
 
 void inparallel_barrier(void) {
-  int r;
-  r= pthread_barrier_wait(&threads_barrier);
-  if (r && r!=PTHREAD_BARRIER_SERIAL_THREAD)
-    { errno=r; diee("pthread_barrier_wait"); }
+  if (NSECTIONS>1) {
+    int r;
+    r= pthread_barrier_wait(&threads_barrier);
+    if (r && r!=PTHREAD_BARRIER_SERIAL_THREAD)
+      { errno=r; diee("pthread_barrier_wait"); }
+  }
 }