diff options
Diffstat (limited to 'src/thread.cpp')
-rw-r--r-- | src/thread.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/thread.cpp b/src/thread.cpp new file mode 100644 index 0000000..54902cc --- /dev/null +++ b/src/thread.cpp @@ -0,0 +1,77 @@ +/******************************************************************************* + * 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 +// + +// Implementation header +#include "thread.h" + +// System includes +#include <cstdio> +#include <pthread.h> +#include <unistd.h> + +Lock Thread::_global_lock; +int Thread::count = 0; + + +// +// Implementation +// + +Thread::Thread() { + Thread::global_lock(); + this->id = Thread::count; + Thread::count += 1; + Thread::global_unlock(); +} + +Thread::~Thread() { +} + +int Thread::start() { + return pthread_create(&this->thread, NULL, Thread::start_routine, this); +} + +void* +Thread::start_routine(void* p) { + ((Thread*) p)->run(); + + return NULL; +} + +void Thread::exit() { + pthread_exit(NULL); +} + +int Thread::wait() { + pthread_join(this->thread, NULL); + + return 0; +} + +void Thread::lock() { + this->object_lock.lock(); +} + +void Thread::unlock() { + this->object_lock.unlock(); +} + +void Thread::global_lock() { + Thread::_global_lock.lock(); +} + +void Thread::global_unlock() { + Thread::_global_lock.unlock(); +} |