Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision ea7d2b051267e571f113e8dabae0d886eda94432)
+++ src/libcfa/concurrency/monitor.c	(revision 62194cbf579b5084c2ebfafd9003eb7b9cb0fa7b)
@@ -54,4 +54,10 @@
 static inline __lock_size_t aggregate    ( monitor_desc * storage [], const __waitfor_mask_t & mask );
 
+#ifndef __CFA_LOCK_NO_YIELD
+#define DO_LOCK lock_yield
+#else
+#define DO_LOCK lock
+#endif
+
 //-----------------------------------------------------------------------------
 // Useful defines
@@ -84,6 +90,6 @@
 	// Enter single monitor
 	static void __enter_monitor_desc( monitor_desc * this, const __monitor_group_t & group ) {
-		// Lock the monitor spinlock, lock_yield to reduce contention
-		lock_yield( this->lock DEBUG_CTX2 );
+		// Lock the monitor spinlock
+		DO_LOCK( this->lock DEBUG_CTX2 );
 		thread_desc * thrd = this_thread;
 
@@ -132,6 +138,6 @@
 
 	static void __enter_monitor_dtor( monitor_desc * this, fptr_t func ) {
-		// Lock the monitor spinlock, lock_yield to reduce contention
-		lock_yield( this->lock DEBUG_CTX2 );
+		// Lock the monitor spinlock
+		DO_LOCK( this->lock DEBUG_CTX2 );
 		thread_desc * thrd = this_thread;
 
@@ -196,6 +202,6 @@
 	// Leave single monitor
 	void __leave_monitor_desc( monitor_desc * this ) {
-		// Lock the monitor spinlock, lock_yield to reduce contention
-		lock_yield( this->lock DEBUG_CTX2 );
+		// Lock the monitor spinlock, DO_LOCK to reduce contention
+		DO_LOCK( this->lock DEBUG_CTX2 );
 
 		LIB_DEBUG_PRINT_SAFE("Kernel : %10p Leaving mon %p (%p)\n", this_thread, this, this->owner);
@@ -243,5 +249,5 @@
 
 		// Lock the monitor now
-		lock_yield( this->lock DEBUG_CTX2 );
+		DO_LOCK( this->lock DEBUG_CTX2 );
 
 		disable_interrupts();
@@ -732,5 +738,5 @@
 static inline void lock_all( __spinlock_t * locks [], __lock_size_t count ) {
 	for( __lock_size_t i = 0; i < count; i++ ) {
-		lock_yield( *locks[i] DEBUG_CTX2 );
+		DO_LOCK( *locks[i] DEBUG_CTX2 );
 	}
 }
@@ -739,5 +745,5 @@
 	for( __lock_size_t i = 0; i < count; i++ ) {
 		__spinlock_t * l = &source[i]->lock;
-		lock_yield( *l DEBUG_CTX2 );
+		DO_LOCK( *l DEBUG_CTX2 );
 		if(locks) locks[i] = l;
 	}
