Go to the documentation of this file.
15 #include "absl/synchronization/internal/per_thread_sem.h"
18 #include <condition_variable>
25 #include "gtest/gtest.h"
26 #include "absl/base/config.h"
27 #include "absl/base/internal/cycleclock.h"
28 #include "absl/base/internal/thread_identity.h"
29 #include "absl/strings/str_cat.h"
30 #include "absl/time/clock.h"
31 #include "absl/time/time.h"
38 namespace synchronization_internal {
50 std::unique_lock<std::mutex> lock(
mu_);
51 cv_.wait(lock, [
this]() {
return count_ > 0; });
61 std::lock_guard<std::mutex> lock(
mu_);
68 std::condition_variable
cv_;
85 t->identity2_written.Post();
86 while (t->num_iterations--) {
93 static const int kNumIterations = 100;
95 t.num_iterations = kNumIterations;
106 t.identity2_written.Wait();
110 for (
int i = 0;
i < kNumIterations; ++
i) {
116 min_cycles =
std::min(min_cycles, cycles);
117 total_cycles += cycles;
120 msg,
"min cycle count=", min_cycles,
" avg cycle count=",
124 partner_thread.join();
147 TEST_F(PerThreadSemTest, WithoutTimeout) {
151 TEST_F(PerThreadSemTest, WithTimeout) {
155 TEST_F(PerThreadSemTest, Timeouts) {
164 <<
"Wait returned " << delay - elapsed
165 <<
" early (with " << slop <<
" slop), start time was " <<
start;
177 TEST_F(PerThreadSemTest, ThreadIdentityReuse) {
180 for (
int i = 0;
i < 10000;
i++) {
#define EXPECT_FALSE(condition)
base_internal::ThreadIdentity * GetOrCreateCurrentThreadIdentity()
SimpleSemaphore identity2_written
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
_Use_decl_annotations_ int __cdecl printf(const char *_Format,...)
std::condition_variable cv_
static void Tick(base_internal::ThreadIdentity *identity)
#define EXPECT_LE(val1, val2)
void SleepFor(absl::Duration duration)
#define ABSL_NAMESPACE_END
constexpr Duration Milliseconds(T n)
#define ABSL_NAMESPACE_BEGIN
TEST_F(GraphCyclesTest, NoCycle)
static bool Wait(absl::Time t)
static void Tick(base_internal::ThreadIdentity *identity)
static bool Wait(KernelTimeout t)
constexpr Time UnixEpoch()
static void Post(base_internal::ThreadIdentity *id)
strings_internal::AlphaNumBuffer< numbers_internal::kSixDigitsToBufferSize > SixDigits(double d)
constexpr Duration Seconds(T n)
ABSL_NAMESPACE_BEGIN Time Now()
static bool Wait(KernelTimeout t)
static KernelTimeout Never()
#define EXPECT_TRUE(condition)
static void Post(base_internal::ThreadIdentity *identity)
static void TimingThread(ThreadData *t)
base_internal::ThreadIdentity * identity2
void TestTiming(const char *msg, bool timeout)
base_internal::ThreadIdentity * identity1
static uv_thread_t thread
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:41