Index: src/tests/.expect/monitor.txt
===================================================================
--- src/tests/.expect/monitor.txt	(revision 3bb51e112144273d0beaa9cc3665fd5e23a42e4a)
+++ src/tests/.expect/monitor.txt	(revision 3bb51e112144273d0beaa9cc3665fd5e23a42e4a)
@@ -0,0 +1,1 @@
+4000000
Index: src/tests/monitor.c
===================================================================
--- src/tests/monitor.c	(revision 3bb51e112144273d0beaa9cc3665fd5e23a42e4a)
+++ src/tests/monitor.c	(revision 3bb51e112144273d0beaa9cc3665fd5e23a42e4a)
@@ -0,0 +1,42 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <threads>
+
+struct global_t {
+	int value;
+	monitor m;
+};
+
+void ?{}(global_t * this) {
+	this->value = 0;
+}
+
+static global_t global;
+
+void increment( /*mutex*/ global_t * this ) {
+	enter( &this->m );
+	this->value += 1;
+	leave( &this->m );
+}
+
+struct MyThread { thread t; };
+
+DECL_THREAD(MyThread);
+
+void ?{}( MyThread * this ) {}
+
+void main( MyThread* this ) {
+	for(int i = 0; i < 1000000; i++) {
+		increment( &global );
+	}
+}
+
+int main(int argc, char* argv[]) {
+	assert( global.m.entry_queue.tail != NULL );
+	processor p;
+	{
+		scoped(MyThread) f[4];
+	}
+	sout | global.value | endl;
+}
