Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision cc7f4b1e1f5f47761e1092680bb42e28d29e1724)
+++ src/libcfa/concurrency/monitor	(revision 60401b764ca2cd20cb0ef3769e0acce07f8909d7)
@@ -20,4 +20,5 @@
 #include "assert"
 #include "invoke.h"
+#include "stdlib"
 
 struct __monitor_t {
@@ -33,19 +34,38 @@
 }
 
+//Basic entering routine
 void enter(__monitor_t *);
 void leave(__monitor_t *);
 
+//Array entering routine
+void enter(__monitor_t **, int count);
+void leave(__monitor_t **, int count);
+
 struct monitor_guard_t {
-	__monitor_t * m;
+	__monitor_t ** m;
+	int count;
 };
 
-static inline void ?{}( monitor_guard_t * this, __monitor_t * m ) {
+static inline int ?<?(__monitor_t* lhs, __monitor_t* rhs) {
+	return ((intptr_t)lhs) < ((intptr_t)rhs);
+}
+
+static inline void ?{}( monitor_guard_t * this, __monitor_t ** m ) {
 	this->m = m;
-	enter( this->m );
+	this->count = 1;
+	enter( *this->m );
+}
+
+static inline void ?{}( monitor_guard_t * this, __monitor_t ** m, int count ) {
+	this->m = m;
+	this->count = count;
+	qsort(this->m, count);
+	enter( this->m, this->count );
 }
 
 static inline void ^?{}( monitor_guard_t * this ) {
-	leave( this->m );
+	leave( this->m, this->count );
 }
 
+
 #endif //MONITOR_H
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision cc7f4b1e1f5f47761e1092680bb42e28d29e1724)
+++ src/libcfa/concurrency/monitor.c	(revision 60401b764ca2cd20cb0ef3769e0acce07f8909d7)
@@ -71,2 +71,16 @@
 	}
 }
+
+void enter(__monitor_t ** monitors, int count) {
+	for(int i = 0; i < count; i++) {
+		// printf("%d\n", i);
+		enter( monitors[i] );
+	}
+}
+
+void leave(__monitor_t ** monitors, int count) {
+	for(int i = count - 1; i >= 0; i--) {
+		// printf("%d\n", i);
+		leave( monitors[i] );
+	}
+}
