mirror of https://github.com/grpc/grpc.git
reviewable/pr14459/r1
parent
5e1298f0a8
commit
da69355f30
97 changed files with 549 additions and 441 deletions
@ -1,48 +0,0 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015 gRPC authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_LIB_GPR_THD_H |
||||
#define GRPC_CORE_LIB_GPR_THD_H |
||||
/** Internal thread interface for GPR.
|
||||
|
||||
Types |
||||
gpr_thd_options options used when creating a thread |
||||
*/ |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
#include <grpc/support/thd_id.h> |
||||
#include <grpc/support/time.h> |
||||
|
||||
/** Create a new thread running (*thd_body)(arg) and place its thread identifier
|
||||
in *t, and return true. If there are insufficient resources, return false. |
||||
thd_name is the name of the thread for identification purposes on platforms |
||||
that support thread naming. |
||||
The thread must be joined. */ |
||||
int gpr_thd_new(gpr_thd_id* t, const char* thd_name, |
||||
void (*thd_body)(void* arg), void* arg); |
||||
|
||||
/** Blocks until the specified thread properly terminates. */ |
||||
void gpr_thd_join(gpr_thd_id t); |
||||
|
||||
/* Internal interfaces between modules within the gpr support library. */ |
||||
void gpr_thd_init(); |
||||
|
||||
/* Wait for all outstanding threads to finish, up to deadline */ |
||||
int gpr_await_threads(gpr_timespec deadline); |
||||
|
||||
#endif /* GRPC_CORE_LIB_GPR_THD_H */ |
@ -0,0 +1,79 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015 gRPC authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_LIB_GPRPP_THD_H |
||||
#define GRPC_CORE_LIB_GPRPP_THD_H |
||||
|
||||
/** Internal thread interface. */ |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/sync.h> |
||||
#include <grpc/support/thd_id.h> |
||||
#include <grpc/support/time.h> |
||||
|
||||
namespace grpc_core { |
||||
|
||||
class Thread { |
||||
public: |
||||
/// Default constructor only to allow use in structs that lack constructors
|
||||
/// Does not produce a validly-constructed thread; must later
|
||||
/// use placement new to construct a real thread. Does not init mu_ and cv_
|
||||
Thread(): real_(false), alive_(false), started_(false), joined_(false) {} |
||||
|
||||
Thread(const char* thd_name, void (*thd_body)(void* arg), void* arg, |
||||
bool* success = nullptr); |
||||
~Thread() { |
||||
if (!alive_) { |
||||
// This thread never existed, so nothing to do
|
||||
} else { |
||||
GPR_ASSERT(joined_); |
||||
} |
||||
if (real_) { |
||||
gpr_mu_destroy(&mu_); |
||||
gpr_cv_destroy(&ready_); |
||||
} |
||||
} |
||||
|
||||
void Start() { |
||||
gpr_mu_lock(&mu_); |
||||
if (alive_) { |
||||
started_ = true; |
||||
gpr_cv_signal(&ready_); |
||||
} |
||||
gpr_mu_unlock(&mu_); |
||||
} |
||||
void Join(); |
||||
|
||||
static void Init(); |
||||
static bool AwaitAll(gpr_timespec deadline); |
||||
private: |
||||
gpr_mu mu_; |
||||
gpr_cv ready_; |
||||
|
||||
gpr_thd_id id_; |
||||
bool real_; |
||||
bool alive_; |
||||
bool started_; |
||||
bool joined_; |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_LIB_GPRPP_THD_H */ |
Loading…
Reference in new issue