никак не могу сделать вывод по одному числу между потоками. :(
суть задачи: 1-й тред должен генерировать 5ть рандомных чисел каждую секунду, в течение минуты. 2-рой же должен вывести по одному числу из сгенерированных пяти каждую секунду. И как оно как-то работает, но в консоли там абзац взлетит, то табуляция исчезнет. Ну и насколько я понял алгоритм такой:
вывод первых пяти чиле -> 2-рой тред привязался к этому массиву и начинает выводить его по одному числу -> 1-й тред продолжает генерацию новых пяти чисел.... -> 2-рой, после того как закончил вывод первого массива, берет следующий и его также выводит по одном.
Но это для меня уже вообще не посильно, может просто кому бедет интерестно сделать. Мне только чтобы, кто-то может, улучшить мой код, чтобы не было проблем в консоли. вот кстати он:
#include <thread>
#include <chrono>
#include <mutex>
#include <Mtx.h>
using namespace std;
void GenNumbers(int arr[], const int size);
void Show(int arr[], const int size);
mutex mtx;
int main()
{
const int SIZE = 5;
int arr[SIZE];
thread t1(GenNumbers, arr, SIZE);
thread t2(Show, arr, SIZE);
t1.join();
t2.join();
}
void GenNumbers(int arr[], const int size)
{
srand(static_cast<unsigned>(time(nullptr)));
for (int j = 0; j < 60; j++)
{
std::cout << "\nGeneration works...\t";
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 100;
std::cout << arr[i] << " ";
}
std::cout << std::endl;
this_thread::sleep_for(chrono::seconds(1));
}
std::cout << std::endl;
}
void Show(int arr[], const int size)
{
mtx.lock();
for (int i = 0; i < 60; i++)
{
std::cout << "\nPrint works ...\t";
for (int i = 0; i < 1; i++)
{
std::cout << arr[i];
this_thread::sleep_for(chrono::seconds(1));
}
}
std::cout << endl;
mtx.unlock();
}
по скрипту: Я пытался искать в интернете, ютюбе и темболее книге. Но безрезультатно уже 4-й день. Лично у меня уже идей нет, от слова совсем. Потому отправил так. Думаю здесь есть как минимум 40% от того, что просилось. Поэтому буду рад за: Объяснение или наводку что к чему ;)
Это задача из курсов - информирую :)