// 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; }