/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
library/cpp/yt/threading/unittests/count_down_latch_ut.cpp
78 строк
2 KB
Anton Myagkov
Update ydb version to 24.4 (#4579)
07 фев 2026, 11:59
Не верифицирован
07 фев 2026, 11:59
2c21cae
Код
Авторство
О чём код?
#include <library/cpp/testing/gtest/gtest.h> #include <library/cpp/yt/threading/count_down_latch.h> #include <thread> namespace NYT::NThreading { namespace { //////////////////////////////////////////////////////////////////////////////// void WaitForLatch(const TCountDownLatch& latch) { latch.Wait(); EXPECT_EQ(0, latch.GetCount()); } TEST(TCountDownLatch, TwoThreads) { TCountDownLatch latch(2); std::thread t1(std::bind(&WaitForLatch, std::cref(latch))); std::thread t2(std::bind(&WaitForLatch, std::cref(latch))); EXPECT_EQ(2, latch.GetCount()); latch.CountDown(); EXPECT_EQ(1, latch.GetCount()); latch.CountDown(); EXPECT_EQ(0, latch.GetCount()); t1.join(); t2.join(); } TEST(TCountDownLatch, TwoThreadsPredecremented) { TCountDownLatch latch(2); EXPECT_EQ(2, latch.GetCount()); latch.CountDown(); EXPECT_EQ(1, latch.GetCount()); latch.CountDown(); EXPECT_EQ(0, latch.GetCount()); std::thread t1(std::bind(&WaitForLatch, std::cref(latch))); std::thread t2(std::bind(&WaitForLatch, std::cref(latch))); t1.join(); t2.join(); } TEST(TCountDownLatch, TwoThreadsTwoLatches) { TCountDownLatch first(1); TCountDownLatch second(1); std::thread t1([&] () { first.Wait(); second.CountDown(); EXPECT_EQ(0, first.GetCount()); EXPECT_EQ(0, second.GetCount()); }); std::thread t2([&] () { first.CountDown(); second.Wait(); EXPECT_EQ(0, first.GetCount()); EXPECT_EQ(0, second.GetCount()); }); t1.join(); t2.join(); } //////////////////////////////////////////////////////////////////////////////// } // namespace } // namespace NYT::NThreading