summaryrefslogtreecommitdiff
path: root/src/spinbarrier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/spinbarrier.cpp')
-rw-r--r--src/spinbarrier.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/spinbarrier.cpp b/src/spinbarrier.cpp
new file mode 100644
index 0000000..e7d3b70
--- /dev/null
+++ b/src/spinbarrier.cpp
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2006 International Business Machines Corporation. *
+ * All rights reserved. This program and the accompanying materials *
+ * are made available under the terms of the Common Public License v1.0 *
+ * which accompanies this distribution, and is available at *
+ * http://www.opensource.org/licenses/cpl1.0.php *
+ * *
+ * Contributors: *
+ * Douglas M. Pase - initial API and implementation *
+ *******************************************************************************/
+
+/******************************************************************************
+ * *
+ * SpinBarrier *
+ * *
+ * Author: Douglas M. Pase *
+ * *
+ * Date: September 21, 2000 *
+ * Translated to C++, June 19, 2005 *
+ * *
+ * void barrier() *
+ * *
+ ******************************************************************************/
+
+//
+// Configuration
+//
+
+// Implementation header
+#include "spinbarrier.h"
+
+// System includes
+#include <cstdio>
+
+
+//
+// Implementation
+//
+
+// create a new barrier
+SpinBarrier::SpinBarrier(int participants) :
+ limit(participants) {
+ pthread_barrier_init(&barrier_obj, NULL, this->limit);
+}
+
+// destroy an old barrier
+SpinBarrier::~SpinBarrier() {
+}
+
+// enter the barrier and wait. everyone leaves
+// when the last participant enters the barrier.
+void SpinBarrier::barrier() {
+ pthread_barrier_wait(&this->barrier_obj);
+}