Index: benchmark/schedint/pthreads.c
===================================================================
--- benchmark/schedint/pthreads.c	(revision b4107c815918e9d1300f3381d29c2a863abf7de8)
+++ benchmark/schedint/pthreads.c	(revision e068c8a8da15b590c9ee6dc1bf9fefcffcc2b1dc)
@@ -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;
