никак не могу сделать вывод по одному числу между потоками. :(

Рейтинг: 2Ответов: 0Опубликовано: 12.03.2023

суть задачи: 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% от того, что просилось. Поэтому буду рад за: Объяснение или наводку что к чему ;)

Это задача из курсов - информирую :)

Ответы

Ответов пока нет.