summaryrefslogtreecommitdiff
path: root/src/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread.h')
-rw-r--r--src/thread.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/thread.h b/src/thread.h
new file mode 100644
index 0000000..146bf92
--- /dev/null
+++ b/src/thread.h
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * 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 *
+ *******************************************************************************/
+
+//
+// Configuration
+//
+
+// Include guard
+#if !defined(THREAD_H)
+#define THREAD_H
+
+// System includes
+#include <pthread.h>
+
+// Local includes
+#include "lock.h"
+
+
+//
+// Class definition
+//
+
+class Thread {
+public:
+ Thread();
+ ~Thread();
+
+ virtual int run() = 0;
+
+ int start();
+ int wait();
+ int thread_count() {
+ return Thread::count;
+ }
+ int thread_id() {
+ return id;
+ }
+
+ static void exit();
+
+protected:
+ void lock();
+ void unlock();
+ static void global_lock();
+ static void global_unlock();
+
+private:
+ static void* start_routine(void *);
+ static Lock _global_lock;
+
+ Lock object_lock;
+
+ pthread_t thread;
+
+ static int count;
+ int id;
+ int lock_obj;
+};
+
+#endif