Index: benchmark/mutex/JavaThread.java
===================================================================
--- benchmark/mutex/JavaThread.java	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/mutex/JavaThread.java	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,14 @@
+public class JavaThread {
+	public synchronized void noop() {}
+
+	public static void main(String[] args) {
+		int NoOfTimes = 5000000;
+		JavaThread j = new JavaThread();
+		long start = System.nanoTime();
+		for(int i = 1; i <= NoOfTimes; i += 1) {
+			j.noop();
+		}
+		long end = System.nanoTime();
+		System.out.println( (end - start) / NoOfTimes);
+	}
+}
Index: benchmark/mutex/cfa1.c
===================================================================
--- benchmark/mutex/cfa1.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/mutex/cfa1.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,19 @@
+#include <monitor>
+#include <stdio.h>
+
+#include "bench.h"
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m ) {}
+
+int main(int argc, char* argv[]) {
+	M m;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/mutex/cfa2.c
===================================================================
--- benchmark/mutex/cfa2.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/mutex/cfa2.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,19 @@
+#include <monitor>
+#include <stdio.h>
+
+#include "bench.h"
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2 ) {}
+
+int main(int argc, char* argv[]) {
+	M m1, m2;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m1, m2);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/mutex/cfa4.c
===================================================================
--- benchmark/mutex/cfa4.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/mutex/cfa4.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,20 @@
+#include <monitor>
+#include <stdio.h>
+
+#include "bench.h"
+
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2, M & mutex m3, M & mutex m4 ) {}
+
+int main(int argc, char* argv[]) {
+	M m1, m2, m3, m4;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m1, m2, m3, m4);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/mutex/pthreads.c
===================================================================
--- benchmark/mutex/pthreads.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/mutex/pthreads.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,22 @@
+#include <pthread.h>
+#include <stdio.h>
+
+#include "bench.h"
+
+pthread_mutex_t mutex;
+
+void __attribute__((noinline)) call() {
+	 pthread_mutex_lock  (&mutex);
+	 pthread_mutex_unlock(&mutex);
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/mutex/upp.cc
===================================================================
--- benchmark/mutex/upp.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/mutex/upp.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,20 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Monitor MyMonitor {
+public:
+	void __attribute__((noinline)) call() {}
+};
+
+int main(int argc, char* argv[]) {
+	MyMonitor m;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			m.call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
