This source file includes following definitions.
- startThread
 
- Start
 
- Join
 
- SetJoinable
 
#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;
}