mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-24 23:44:56 +03:00
27dd121d14
git-subtree-dir: outside/re2 git-subtree-mainline: f94738bfd171ae447133e0964843addbb497894f git-subtree-split: 539b44fc4c5a49c3453b80e3af85d297f4cab4bf
45 lines
756 B
C++
45 lines
756 B
C++
// 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;
|
|
}
|