Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision f870e2570c73180f2d87a89ba0c979b70572fd26)
+++ libcfa/src/Makefile.am	(revision 93b8cf40f1dc4e4c569490157bff2a08be7c1534)
@@ -58,6 +58,7 @@
 	bits/queue.hfa \
 	bits/sequence.hfa \
+	concurrency/iofwd.hfa \
+	concurrency/barrier.hfa \
 	containers/array.hfa \
-	concurrency/iofwd.hfa \
 	containers/list.hfa \
 	containers/queueLockFree.hfa \
Index: libcfa/src/concurrency/barrier.hfa
===================================================================
--- libcfa/src/concurrency/barrier.hfa	(revision 93b8cf40f1dc4e4c569490157bff2a08be7c1534)
+++ libcfa/src/concurrency/barrier.hfa	(revision 93b8cf40f1dc4e4c569490157bff2a08be7c1534)
@@ -0,0 +1,42 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// barrier.hfa -- simple barrier implemented from monitors
+//
+// Author           : Thierry Delisle
+// Created On       : Thu Mar 31 16:51:35 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+#pragma once
+
+#include <monitor.hfa>
+
+monitor barrier {
+	int max;
+	int count;
+
+	condition c;
+};
+
+void ?{}( barrier & this, int max ) {
+	this.max = max;
+	this.count = max;
+}
+
+static inline int block(barrier & mutex this ) {
+	this.count -= 1;
+	int arrival = this.count;
+	if(arrival != 0) {
+		wait(this.c);
+	} else {
+		signal_all(this.c);
+		this.count = this.max;
+	}
+	return arrival;
+}
