From c00ee82f00f3daf4f71335ad0e44064cc6111ff6 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Tue, 12 Oct 2021 19:33:00 +0300 Subject: [PATCH] exercise 3 --- lesson_6/exercise_3.hpp | 59 +++++++++++++++++++++++++++++++++++++++++ lesson_6/main.cpp | 4 ++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 lesson_6/exercise_3.hpp diff --git a/lesson_6/exercise_3.hpp b/lesson_6/exercise_3.hpp new file mode 100644 index 0000000..87a69b0 --- /dev/null +++ b/lesson_6/exercise_3.hpp @@ -0,0 +1,59 @@ +/* + * exercise_3.hpp + * + * Created on: 12 окт. 2021 г. + * Author: alexander + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +std::mutex m; + +void generate_things(std::vector &v) +{ + std::random_device rd; + std::mt19937 mersenne(rd()); + std::uniform_int_distribution urd(0, 1000); + + std::lock_guard lg(m); + + std::generate(v.begin(), v.end(), [&]() + { + return urd(mersenne); + }); +} + +void pop_thing(std::vector &v) +{ + std::lock_guard lg(m); + + std::cout << *std::max_element(v.begin(), v.end()) << std::endl; +} + +void exercise_3() +{ + std::vector v(100); + size_t count = 100; + + while (count--) + { + std::thread owner([&]() + { + generate_things(v); + }); + std::thread thief([&]() + { + pop_thing(v); + }); + + owner.join(); + thief.join(); + } +} diff --git a/lesson_6/main.cpp b/lesson_6/main.cpp index 012a7bb..aa910e4 100644 --- a/lesson_6/main.cpp +++ b/lesson_6/main.cpp @@ -6,11 +6,13 @@ */ #include "exercise_1.hpp" #include "exercise_2.hpp" +#include "exercise_3.hpp" int main() { // exercise_1(); - exercise_2(); +// exercise_2(); + exercise_3(); return 0; }