diff options
Diffstat (limited to 'test/latch.cc')
-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; +} |