diff options
author | kimkim <kimkim@yandex-team.ru> | 2022-02-10 16:49:28 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:28 +0300 |
commit | 10807864acf73d00f425a23b442aac2cf34403a8 (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /util/system/rwlock_ut.cpp | |
parent | 13f84424ed9975f6827d9786087c6fe6ea265cda (diff) | |
download | ydb-10807864acf73d00f425a23b442aac2cf34403a8.tar.gz |
Restoring authorship annotation for <kimkim@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'util/system/rwlock_ut.cpp')
-rw-r--r-- | util/system/rwlock_ut.cpp | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/util/system/rwlock_ut.cpp b/util/system/rwlock_ut.cpp index d050737c9c..2b384c05b3 100644 --- a/util/system/rwlock_ut.cpp +++ b/util/system/rwlock_ut.cpp @@ -2,36 +2,36 @@ #include "atomic.h" #include <library/cpp/testing/unittest/registar.h> - + #include <util/thread/pool.h> -#include <util/random/random.h> - +#include <util/random/random.h> + class TRWMutexTest: public TTestBase { - UNIT_TEST_SUITE(TRWMutexTest); + UNIT_TEST_SUITE(TRWMutexTest); UNIT_TEST(TestReaders) UNIT_TEST(TestReadersWriters) - UNIT_TEST_SUITE_END(); - - struct TSharedData { - TSharedData() - : writersIn(0) - , readersIn(0) - , failed(false) - { - } - + UNIT_TEST_SUITE_END(); + + struct TSharedData { + TSharedData() + : writersIn(0) + , readersIn(0) + , failed(false) + { + } + TAtomic writersIn; TAtomic readersIn; - - bool failed; - - TRWMutex mutex; - }; + + bool failed; + + TRWMutex mutex; + }; class TThreadTask: public IObjectInQueue { public: using PFunc = void (TThreadTask::*)(void); - + TThreadTask(PFunc func, TSharedData& data, size_t id, size_t total) : Func_(func) , Data_(data) @@ -39,62 +39,62 @@ class TRWMutexTest: public TTestBase { , Total_(total) { } - + void Process(void*) override { THolder<TThreadTask> This(this); (this->*Func_)(); } - + #define FAIL_ASSERT(cond) \ if (!(cond)) { \ Data_.failed = true; \ - } + } void RunReaders() { Data_.mutex.AcquireRead(); - + AtomicIncrement(Data_.readersIn); usleep(100); FAIL_ASSERT(Data_.readersIn == long(Total_)); usleep(100); AtomicDecrement(Data_.readersIn); - + Data_.mutex.ReleaseRead(); } - + void RunReadersWriters() { if (Id_ % 2 == 0) { for (size_t i = 0; i < 10; ++i) { Data_.mutex.AcquireRead(); - + AtomicIncrement(Data_.readersIn); FAIL_ASSERT(Data_.writersIn == 0); usleep(RandomNumber<ui32>() % 5); AtomicDecrement(Data_.readersIn); - + Data_.mutex.ReleaseRead(); } } else { for (size_t i = 0; i < 10; ++i) { Data_.mutex.AcquireWrite(); - + AtomicIncrement(Data_.writersIn); FAIL_ASSERT(Data_.readersIn == 0 && Data_.writersIn == 1); usleep(RandomNumber<ui32>() % 5); AtomicDecrement(Data_.writersIn); - + Data_.mutex.ReleaseWrite(); - } - } + } + } } -#undef FAIL_ASSERT - +#undef FAIL_ASSERT + private: PFunc Func_; TSharedData& Data_; size_t Id_; size_t Total_; - }; + }; private: #define RUN_CYCLE(what, count) \ @@ -106,19 +106,19 @@ private: bool b = Data_.failed; \ Data_.failed = false; \ UNIT_ASSERT(!b); - + void TestReaders() { RUN_CYCLE(RunReaders, 1); } - + void TestReadersWriters() { RUN_CYCLE(RunReadersWriters, 1); } - -#undef RUN_CYCLE + +#undef RUN_CYCLE private: TSharedData Data_; TThreadPool Q_; -}; - -UNIT_TEST_SUITE_REGISTRATION(TRWMutexTest) +}; + +UNIT_TEST_SUITE_REGISTRATION(TRWMutexTest) |