diff options
author | Johannes Stoelp <johannes.stoelp@gmail.com> | 2023-11-08 00:14:42 +0100 |
---|---|---|
committer | Johannes Stoelp <johannes.stoelp@gmail.com> | 2023-11-08 00:14:42 +0100 |
commit | 7a91597392c64ec8bd2b3cdfc44df98b928f41d3 (patch) | |
tree | 85bef5dd86696c742e87d0b61a0034f73789a1ac /test | |
parent | 1cf1cbdeb6542bd84631aad950c02d951af319a4 (diff) | |
download | cpp-utils-7a91597392c64ec8bd2b3cdfc44df98b928f41d3.tar.gz cpp-utils-7a91597392c64ec8bd2b3cdfc44df98b928f41d3.zip |
latch: add simple latch based on a mutex and cv
Diffstat (limited to 'test')
-rw-r--r-- | test/latch.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/latch.cc b/test/latch.cc new file mode 100644 index 0000000..567e3db --- /dev/null +++ b/test/latch.cc @@ -0,0 +1,37 @@ +#include <latch.h> + +#include <chrono> +#include <thread> +#include <vector> + +#include <cassert> +#include <cstdio> + +constexpr unsigned kNumThreads = 16; + +int main() { + latch gate(kNumThreads); + + std::vector<std::thread> threads; + threads.reserve(kNumThreads); + + for (unsigned t = 0; t < kNumThreads; ++t) { + threads.emplace_back([&gate, t]() { + if (t % 2 == 0) { + unsigned sec = t / 2; + std::printf("th%02u sleep %us\n", t, sec); + std::this_thread::sleep_for(std::chrono::seconds(sec)); + } + + std::printf("th%02u at gate\n", t); + gate.arrive_and_wait(); + std::printf("th%02u finished\n", t); + }); + } + + for (auto& th : threads) { + th.join(); + } + + return 0; +} |