Как изменить этот notify_one, чтобы он выбирал случайный поток? - PullRequest
0 голосов
/ 29 октября 2019

Заранее спасибо за любую помощь. Попытка создать программу, которая создаст 6 потоков, затем каждые 2 секунды случайным образом выбирает один и заставляет его печатать его номер. Я, очевидно, что-то делаю не так, потому что он просто печатает 0-1-2-3-4-5 бесконечно. Код ниже. Главный вопрос: что мне делать, чтобы разблокировать случайные темы?

#include <thread>
#include <memory>
#include <chrono>
#include <condition_variable>
std::condition_variable* cv = new std::condition_variable();
std::mutex cv_m;

void threadFunc(std::shared_ptr<bool> flag2, int id)
{
    while (true)
    {
        std::unique_lock<std::mutex> lock(cv_m);
        cv->wait(lock);
        if (true)
            if (*flag2) std::cout << "Thread" << " " << id << std::endl;
    }
}
int main() {

    std::shared_ptr<bool> f2 = std::make_shared<bool>(false);

    std::thread threads[6];

    for (int i = 0; i < 6; i++)
        threads[i] = std::thread(threadFunc, f2, i);
    *f2 = true;

    while (true)
    {
        cv->notify_one();
        std::this_thread::sleep_for(std::chrono::seconds(2));
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...