diff options
Diffstat (limited to 'util/thread.cc')
-rw-r--r-- | util/thread.cc | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/util/thread.cc b/util/thread.cc new file mode 100644 index 0000000..7349991 --- /dev/null +++ b/util/thread.cc @@ -0,0 +1,44 @@ +// Copyright 2009 The RE2 Authors. All Rights Reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include <pthread.h> + +#include "util/util.h" +#include "util/thread.h" + +Thread::Thread() { + pid_ = 0; + running_ = 0; + joinable_ = 0; +} + +Thread::~Thread() { +} + +void *startThread(void *v) { + Thread* t = (Thread*)v; + t->Run(); + return 0; +} + +void Thread::Start() { + CHECK(!running_); + pthread_create(&pid_, 0, startThread, this); + running_ = true; + if (!joinable_) + pthread_detach(pid_); +} + +void Thread::Join() { + CHECK(running_); + CHECK(joinable_); + void *val; + pthread_join(pid_, &val); + running_ = 0; +} + +void Thread::SetJoinable(bool j) { + CHECK(!running_); + joinable_ = j; +} |