#include <cstdio>

#include "bench.h"

int argc;
char** argv;
volatile int go = 0;

_Monitor M {
	uCondition cond;
public:
	void __attribute__((noinline)) call() {
		cond.signal();
	}

	int __attribute__((noinline)) wait() {
		go = 1;
		BENCH(
			for (size_t i = 0; i < n; i++) {
				cond.wait();
			},
			result
		)

		printf("%llu\n", result);
		go = 0;
		return 0;
	}
};

M m;

_Task T {
	void main() {
		while(go == 0) { yield(); }
		while(go == 1) { m.call(); }

	}
};

int main(int margc, char* margv[]) {
	argc = margc;
	argv = margv;
	T t;
	return m.wait();
}