Index: benchmark/schedint/JavaThread.java
===================================================================
--- benchmark/schedint/JavaThread.java	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/JavaThread.java	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -63,5 +63,5 @@
 		synchronized(m) {
 			s.start();
-			while( !Monitor.go ) {
+			while( ! Monitor.go ) { // waiter must start first
 				Thread.yield();
 			}
Index: benchmark/schedint/cfa1.cfa
===================================================================
--- benchmark/schedint/cfa1.cfa	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/cfa1.cfa	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -7,4 +7,5 @@
 
 volatile int go = 0;
+
 condition c;
 monitor M {} m1;
@@ -13,5 +14,4 @@
 	signal( c );
 }
-
 void __attribute__((noinline)) wait( M & mutex p1 ) {
 	go = 1;
@@ -19,12 +19,11 @@
 		wait( c );
 	}
-	go = 0;
 }
 
 thread T {};
 void main( T & ) {
-	while ( go == 0 ) { yield(); }
+	while ( go == 0 ) { yield(); } // waiter must start first
 	BENCH(
-		while ( go == 1 ) { call( m1 ); },
+		for ( times ) { call( m1 ); },
 		result
 	)
Index: benchmark/schedint/cfa2.cfa
===================================================================
--- benchmark/schedint/cfa2.cfa	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/cfa2.cfa	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -7,4 +7,5 @@
 
 volatile int go = 0;
+
 condition c;
 monitor M {} m1, m2;
@@ -13,5 +14,4 @@
 	signal( c );
 }
-
 void __attribute__((noinline)) wait( M & mutex p1, M & mutex p2 ) {
 	go = 1;
@@ -19,12 +19,11 @@
 		wait( c );
 	}
-	go = 0;
 }
 
 thread T {};
 void main( T & ) {
-	while ( go == 0 ) { yield(); }
+	while ( go == 0 ) { yield(); } // waiter must start first
 	BENCH(
-		while ( go == 1 ) { call( m1, m2 ); },
+		for ( times ) { call( m1, m2 ); },
 		result
 	)
Index: benchmark/schedint/cfa4.cfa
===================================================================
--- benchmark/schedint/cfa4.cfa	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/cfa4.cfa	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -4,7 +4,8 @@
 #include <stdio.h>
 
-#include "bench.h"
+#include "../bench.h"
 
 volatile int go = 0;
+
 condition c;
 monitor M {} m1, m2, m3, m4;
@@ -13,5 +14,4 @@
 	signal( c );
 }
-
 void __attribute__((noinline)) wait( M & mutex p1, M & mutex p2, M & mutex p3, M & mutex p4 ) {
 	go = 1;
@@ -19,12 +19,11 @@
 		wait( c );
 	}
-	go = 0;
 }
 
 thread T {};
 void main( T & ) {
-	while ( go == 0 ) { yield(); }
+	while ( go == 0 ) { yield(); } // waiter must start first
 	BENCH(
-		while ( go == 1 ) { call( m1, m2, m3, m4 ); },
+		for ( times ) { call( m1, m2, m3, m4 ); },
 		result
 	)
Index: benchmark/schedint/pthreads.c
===================================================================
--- benchmark/schedint/pthreads.c	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/pthreads.c	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -6,31 +6,31 @@
 volatile int go = 0;
 
+pthread_mutex_t m;
 pthread_cond_t c;
-pthread_mutex_t m;
 
 void __attribute__((noinline)) call() {
-	pthread_mutex_lock(&m);
-	pthread_cond_signal(&c);
-	pthread_mutex_unlock(&m);
+	pthread_mutex_lock( &m );
+	pthread_cond_signal( &c );
+	pthread_mutex_unlock( &m );
 }
 
-int  __attribute__((noinline)) wait() {
+void __attribute__((noinline)) wait() {
 	pthread_mutex_lock(&m);
 	go = 1;
+	for ( size_t i = 0; i < times; i++ ) {
+		pthread_cond_wait( &c, &m );
+	}
+	go = 0;
+	pthread_mutex_unlock( &m );
+}
+
+void * thread_main( __attribute__((unused)) void * arg ) {
+	while ( go == 0 ) { sched_yield(); } // waiter must start first
+	// barging for lock acquire => may not execute N times
 	BENCH(
-		for (size_t i = 0; i < times; i++) {
-			pthread_cond_wait(&c, &m);
-		},
+		while ( go == 1 ) { call(); },
 		result
 	)
 	printf( "%g\n", result );
-	go = 0;
-	pthread_mutex_unlock(&m);
-	return 0;
-}
-
-void* thread_main(__attribute__((unused)) void * arg ) {
-	while(go == 0) { sched_yield(); }
-	while(go == 1) { call(); }
 	return NULL;
 }
@@ -39,10 +39,10 @@
 	BENCH_START()
 	pthread_t thread;
-	if (pthread_create(&thread, NULL, thread_main, NULL) < 0) {
+	if ( pthread_create( &thread, NULL, thread_main, NULL ) < 0 ) {
 		perror( "failure" );
 		return 1;
 	}
 	wait();
-	if (pthread_join( thread, NULL) < 0) {
+	if ( pthread_join( thread, NULL ) < 0 ) {
 		perror( "failure" );
 		return 1;
Index: benchmark/schedint/rust.rs
===================================================================
--- benchmark/schedint/rust.rs	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/rust.rs	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -18,5 +18,5 @@
 
 	let th = thread::spawn( move || {
-		while *m2.lock().unwrap() == 0 {
+		while *m2.lock().unwrap() == 0 { // waiter must start first
 			thread::yield_now();
 		}
Index: benchmark/schedint/upp.cc
===================================================================
--- benchmark/schedint/upp.cc	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
+++ benchmark/schedint/upp.cc	(revision 26fd986f03393501efae80e424071cb9eedeaa81)
@@ -11,26 +11,22 @@
 		cond.signal();
 	}
+	void __attribute__((noinline)) wait() {
+		go = 1;
+		for ( size_t i = 0; i < times; i++ ) {
+			cond.wait();
+		}
+	}
+} m;
 
-	int __attribute__((noinline)) wait() {
-		go = 1;
+_Task T {
+	void main() {
+		while ( go == 0 ) { yield(); } // waiter must start first
 		BENCH(
-			for (size_t i = 0; i < times; i++) {
-				cond.wait();
+			for ( size_t i = 0; i < times; i++ ) {
+				m.call();
 			},
 			result
 		)
 		printf( "%g\n", result );
-		go = 0;
-		return 0;
-	}
-};
-
-M m;
-
-_Task T {
-	void main() {
-		while(go == 0) { yield(); }
-		while(go == 1) { m.call(); }
-
 	}
 };
@@ -39,5 +35,5 @@
 	BENCH_START()
 	T t;
-	return m.wait();
+	m.wait();
 }
 
