Index: c/benchmark/CorCtxSwitch.c
===================================================================
--- src/benchmark/CorCtxSwitch.c	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#include <fstream>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-coroutine GreatSuspender {};
-
-void ?{}( GreatSuspender & this ) {
-	prime(this);
-}
-
-void main( GreatSuspender & this )
-{
-	while( true ) {
-		suspend();
-	}
-}
-
-void resumer( GreatSuspender & this, const unsigned int NoOfTimes ) {
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		resume( this );
-	}
-}
-
-int main() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	GreatSuspender s;
-
-	StartTime = Time();
-	resumer( s, NoOfTimes );
-	EndTime = Time();
-
-	sout | ( EndTime - StartTime ) / NoOfTimes | endl;
-}
Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ src/benchmark/Makefile.am	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -19,4 +19,8 @@
 AM_CFLAGS = -g -Wall -Wno-unused-function -O2
 CC = @CFA_BINDIR@/@CFA_NAME@
+REPEAT = ${abs_top_srcdir}/tools/a.out
+repeats = 30
+
+.NOTPARALLEL:
 
 noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT)
@@ -30,51 +34,66 @@
 	rm -f ./a.out ;
 
-ctxswitch-coroutine$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 CorCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-ctxswitch-thread$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 ThrdCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-ctxswitch-pthread$(EXEEXT):
-	@BACKEND_CC@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -lrt -pthread -DN=50000000 PthrdCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-sched-int$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-monitor$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 Monitor.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
 csv-data$(EXEEXT):
 	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=50000000 csv-data.c
 	@./a.out
 	@rm -f ./a.out
+
+## =========================================================================================================
+ctxswitch$(EXEEXT): \
+	ctxswitch-cfa_coroutine.run 	\
+	ctxswitch-cfa_thread.run 	\
+	ctxswitch-upp_coroutine.run 	\
+	ctxswitch-upp_thread.run 	\
+	ctxswitch-pthread.run
+
+ctxswitch-cfa_coroutine$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DN=50000000 ctxswitch/cfa_cor.c
+
+ctxswitch-cfa_thread$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DN=50000000 ctxswitch/cfa_thrd.c
+
+ctxswitch-upp_coroutine$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DN=50000000 ctxswitch/upp_cor.cc
+
+ctxswitch-upp_thread$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DN=50000000 ctxswitch/upp_cor.cc
+
+ctxswitch-pthread$(EXEEXT):
+	@BACKEND_CC@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -lrt -pthread -DN=50000000 ctxswitch/pthreads.c
+
+## =========================================================================================================
+creation$(EXEEXT) :\
+	creation-pthread.run		\
+	creation-cfa_coroutine.run 	\
+	creation-cfa_thread.run 	\
+	creation-upp_coroutine.run 	\
+	creation-upp_thread.run
+
+creation-cfa_coroutine$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DBENCH_N=500000000 creation/cfa_cor.c
+
+creation-cfa_thread$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DBENCH_N=10000000 creation/cfa_thrd.c
+
+creation-upp_coroutine$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DBENCH_N=50000000 creation/upp_cor.cc
+
+creation-upp_thread$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DBENCH_N=50000000 creation/upp_cor.cc
+
+creation-pthread$(EXEEXT):
+	@BACKEND_CC@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -lrt -pthread -DBENCH_N=2500000 creation/pthreads.c
+
+## =========================================================================================================
+sched-int$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
+
+monitor$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 Monitor.c
+
+%.run : %$(EXEEXT)
+	@rm -f .result.log
+	@./catchsig
+	@${REPEAT} ${repeats} ./a.out | tee -a .result.log
+	@./stat.py .result.log
+	@rm -f a.out .result.log
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ src/benchmark/Makefile.in	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -302,4 +302,6 @@
 top_srcdir = @top_srcdir@
 AM_CFLAGS = -g -Wall -Wno-unused-function -O2
+REPEAT = ${abs_top_srcdir}/tools/a.out
+repeats = 30
 noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT)
 all: all-am
@@ -339,4 +341,12 @@
 clean-noinstPROGRAMS:
 	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+
+ctxswitch-coroutine$(EXEEXT): $(ctxswitch_coroutine_OBJECTS) $(ctxswitch_coroutine_DEPENDENCIES) $(EXTRA_ctxswitch_coroutine_DEPENDENCIES) 
+	@rm -f ctxswitch-coroutine$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ctxswitch_coroutine_OBJECTS) $(ctxswitch_coroutine_LDADD) $(LIBS)
+
+ctxswitch-thread$(EXEEXT): $(ctxswitch_thread_OBJECTS) $(ctxswitch_thread_DEPENDENCIES) $(EXTRA_ctxswitch_thread_DEPENDENCIES) 
+	@rm -f ctxswitch-thread$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ctxswitch_thread_OBJECTS) $(ctxswitch_thread_LDADD) $(LIBS)
 
 mostlyclean-compile:
@@ -572,4 +582,6 @@
 
 
+.NOTPARALLEL:
+
 bench$(EXEEXT) :
 	@for ccflags in "-debug" "-nodebug"; do \
@@ -580,49 +592,4 @@
 	rm -f ./a.out ;
 
-ctxswitch-coroutine$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 CorCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-ctxswitch-thread$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 ThrdCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-ctxswitch-pthread$(EXEEXT):
-	@BACKEND_CC@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -lrt -pthread -DN=50000000 PthrdCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-sched-int$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-monitor$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 Monitor.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
 csv-data$(EXEEXT):
 	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=50000000 csv-data.c
@@ -630,4 +597,61 @@
 	@rm -f ./a.out
 
+ctxswitch$(EXEEXT): \
+	ctxswitch-cfa_coroutine.run 	\
+	ctxswitch-cfa_thread.run 	\
+	ctxswitch-upp_coroutine.run 	\
+	ctxswitch-upp_thread.run 	\
+	ctxswitch-pthread.run
+
+ctxswitch-cfa_coroutine$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DN=50000000 ctxswitch/cfa_cor.c
+
+ctxswitch-cfa_thread$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DN=50000000 ctxswitch/cfa_thrd.c
+
+ctxswitch-upp_coroutine$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DN=50000000 ctxswitch/upp_cor.cc
+
+ctxswitch-upp_thread$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DN=50000000 ctxswitch/upp_cor.cc
+
+ctxswitch-pthread$(EXEEXT):
+	@BACKEND_CC@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -lrt -pthread -DN=50000000 ctxswitch/pthreads.c
+
+creation$(EXEEXT) :\
+	creation-pthread.run		\
+	creation-cfa_coroutine.run 	\
+	creation-cfa_thread.run 	\
+	creation-upp_coroutine.run 	\
+	creation-upp_thread.run
+
+creation-cfa_coroutine$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DBENCH_N=500000000 creation/cfa_cor.c
+
+creation-cfa_thread$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -DBENCH_N=10000000 creation/cfa_thrd.c
+
+creation-upp_coroutine$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DBENCH_N=50000000 creation/upp_cor.cc
+
+creation-upp_thread$(EXEEXT):
+	u++ ${AM_CFLAGS} ${CFLAGS} ${ccflags} ${ccflags} -I. -nodebug -lrt -DBENCH_N=50000000 creation/upp_cor.cc
+
+creation-pthread$(EXEEXT):
+	@BACKEND_CC@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -lrt -pthread -DBENCH_N=2500000 creation/pthreads.c
+
+sched-int$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
+
+monitor$(EXEEXT):
+	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 Monitor.c
+
+%.run : %$(EXEEXT)
+	@rm -f .result.log
+	@./catchsig
+	@${REPEAT} ${repeats} ./a.out | tee -a .result.log
+	@./stat.py .result.log
+	@rm -f a.out .result.log
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
Index: c/benchmark/PthrdCtxSwitch.c
===================================================================
--- src/benchmark/PthrdCtxSwitch.c	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <sched.h>
-
-#include "bench.h"
-
-int main() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		sched_yield();
-	}
-	EndTime = Time();
-
-	printf("%lld\n", ( EndTime - StartTime ) / NoOfTimes );
-}
Index: c/benchmark/ThrdCtxSwitch.c
===================================================================
--- src/benchmark/ThrdCtxSwitch.c	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <fstream>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-int main() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		yield();
-	}
-	EndTime = Time();
-
-	sout | ( EndTime - StartTime ) / NoOfTimes | endl;
-}
Index: src/benchmark/bench.h
===================================================================
--- src/benchmark/bench.h	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ src/benchmark/bench.h	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -1,11 +1,12 @@
 #pragma once
 
-#ifdef __CFORALL__
+#if defined(__CFORALL__)
 extern "C" {
 #endif
+	#include <stdlib.h>
 	#include <unistd.h>					// sysconf
 	#include <sys/times.h>					// times
 	#include <time.h>
-#ifdef __CFORALL__
+#if defined(__CFORALL__)
 }
 #endif
@@ -27,7 +28,21 @@
 } // Time
 
-#ifndef N
-#define N 10000000
+#ifndef BENCH_N
+#define BENCH_N 500 //10000000
 #endif
+
+#define BENCH(statement, output)		\
+	size_t n = BENCH_N;					\
+	if( argc > 2 ) return 1;			\
+	if( argc == 2 ) {					\
+		n = atoi(argv[1]);				\
+	}									\
+	const unsigned int NoOfTimes = n;	\
+	long long int StartTime, EndTime;	\
+	StartTime = Time();					\
+	statement;							\
+	EndTime = Time();					\
+	unsigned long long int output = 	\
+	( EndTime - StartTime ) / NoOfTimes;
 
 unsigned int default_preemption() {
Index: c/benchmark/create_cfaCor.c
===================================================================
--- src/benchmark/create_cfaCor.c	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <coroutine>
-#include <stdlib.h>
-#include <stdio.h>
-
-coroutine MyCoroutine {};
-void main(MyCoroutine * this) {}
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyCoroutine m;
-	}
-}
Index: c/benchmark/create_cfaThrd.c
===================================================================
--- src/benchmark/create_cfaThrd.c	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <thread>
-#include <stdlib.h>
-#include <stdio.h>
-
-thread MyThread {};
-void main(MyThread & this) {}
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyThread m;
-	}
-}
Index: c/benchmark/create_pthrd.c
===================================================================
--- src/benchmark/create_pthrd.c	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#include <pthread.h>
-#include <err.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-static void *foo(void *arg) {
-    return arg;
-}
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("create %lu pthreads ... ", n);
-
-	for (size_t i = 0; i < n; i++) {
-		pthread_t thread;
-		if (pthread_create(&thread, NULL, foo, NULL) < 0) {
-			perror( "failure" );
-			return 1;
-		}
-
-		if (pthread_join( thread, NULL) < 0) {
-			perror( "failure" );
-			return 1;
-		}
-	}
-	printf("finish\n");
-}
Index: c/benchmark/create_uCor.cpp
===================================================================
--- src/benchmark/create_uCor.cpp	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <cstdlib>
-#include <cstdio>
-
-_Coroutine MyCor {
-	void main() {}
-};
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyCor m;
-	}
-	return 0;
-}
Index: c/benchmark/create_uTask.cpp
===================================================================
--- src/benchmark/create_uTask.cpp	(revision f1dd17a2647470d272ed4dccf0b36edd45f84b6e)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <cstdlib>
-#include <cstdio>
-
-_Task MyThread {
-	void main() {}
-};
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyThread m;
-	}
-	return 0;
-}
Index: src/benchmark/creation/cfa_cor.c
===================================================================
--- src/benchmark/creation/cfa_cor.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/creation/cfa_cor.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <coroutine>
+
+#include "bench.h"
+
+coroutine MyCoroutine {};
+void main(MyCoroutine * this) {}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < NoOfTimes; i++) {
+			MyCoroutine m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/cfa_thrd.c
===================================================================
--- src/benchmark/creation/cfa_thrd.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/creation/cfa_thrd.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <thread>
+
+#include "bench.h"
+
+thread MyThread {};
+void main(MyThread & this) {}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < NoOfTimes; i++) {
+			MyThread m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/pthreads.c
===================================================================
--- src/benchmark/creation/pthreads.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/creation/pthreads.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,28 @@
+#include <pthread.h>
+#include <stdio.h>
+
+#include "bench.h"
+
+static void *foo(void *arg) {
+    return arg;
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			pthread_t thread;
+			if (pthread_create(&thread, NULL, foo, NULL) < 0) {
+				perror( "failure" );
+				return 1;
+			}
+
+			if (pthread_join( thread, NULL) < 0) {
+				perror( "failure" );
+				return 1;
+			}
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/upp_cor.cc
===================================================================
--- src/benchmark/creation/upp_cor.cc	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/creation/upp_cor.cc	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,18 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Coroutine MyCor {
+	void main() {}
+};
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyCor m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/upp_thrd.cc
===================================================================
--- src/benchmark/creation/upp_thrd.cc	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/creation/upp_thrd.cc	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,18 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Task MyThread {
+	void main() {}
+};
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyThread m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/ctxswitch/cfa_cor.c
===================================================================
--- src/benchmark/ctxswitch/cfa_cor.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/ctxswitch/cfa_cor.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,35 @@
+#include <fstream>
+#include <stdlib>
+#include <thread>
+
+#include "bench.h"
+
+coroutine GreatSuspender {};
+
+void ?{}( GreatSuspender & this ) {
+	prime(this);
+}
+
+void main( GreatSuspender & this )
+{
+	while( true ) {
+		suspend();
+	}
+}
+
+void resumer( GreatSuspender & this, const unsigned int NoOfTimes ) {
+	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
+		resume( this );
+	}
+}
+
+int main(int argc, char* argv[]) {
+	GreatSuspender s;
+
+	BENCH(
+		resumer( s, NoOfTimes );,
+		result
+	)
+
+	sout | result | endl;
+}
Index: src/benchmark/ctxswitch/cfa_thrd.c
===================================================================
--- src/benchmark/ctxswitch/cfa_thrd.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/ctxswitch/cfa_thrd.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,18 @@
+#include <fstream>
+#include <stdlib>
+#include <thread>
+
+#include "bench.h"
+
+int main() {
+	const unsigned int NoOfTimes = N;
+	long long int StartTime, EndTime;
+
+	StartTime = Time();
+	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
+		yield();
+	}
+	EndTime = Time();
+
+	sout | ( EndTime - StartTime ) / NoOfTimes | endl;
+}
Index: src/benchmark/ctxswitch/pthreads.c
===================================================================
--- src/benchmark/ctxswitch/pthreads.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
+++ src/benchmark/ctxswitch/pthreads.c	(revision 034165a8640dca94275d38852f1ba492194b3900)
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sched.h>
+
+#include "bench.h"
+
+int main() {
+	const unsigned int NoOfTimes = N;
+	long long int StartTime, EndTime;
+
+	StartTime = Time();
+	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
+		sched_yield();
+	}
+	EndTime = Time();
+
+	printf("%lld\n", ( EndTime - StartTime ) / NoOfTimes );
+}
