1 // Copyright 2009 The RE2 Authors. All Rights Reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include <pthread.h> 6 7 #include "util/util.h" 8 #include "util/thread.h" 9 Thread()10Thread::Thread() { 11 pid_ = 0; 12 running_ = 0; 13 joinable_ = 0; 14 } 15 ~Thread()16Thread::~Thread() { 17 } 18 startThread(void * v)19void *startThread(void *v) { 20 Thread* t = (Thread*)v; 21 t->Run(); 22 return 0; 23 } 24 Start()25void Thread::Start() { 26 CHECK(!running_); 27 pthread_create(&pid_, 0, startThread, this); 28 running_ = true; 29 if (!joinable_) 30 pthread_detach(pid_); 31 } 32 Join()33void Thread::Join() { 34 CHECK(running_); 35 CHECK(joinable_); 36 void *val; 37 pthread_join(pid_, &val); 38 running_ = 0; 39 } 40 SetJoinable(bool j)41void Thread::SetJoinable(bool j) { 42 CHECK(!running_); 43 joinable_ = j; 44 } 45