Оптимизация потоковой передачи в C ++ - PullRequest
0 голосов
/ 13 июля 2020

У меня есть три проблемы с прикрепленным кодом, который связан с потоками. Мне нужно выполнить вызовы функций, чтобы предоставить информацию о следующих трех элементах:

  1. Поток vecOfThreads[1] пуст без каких-либо текущих задач
  2. Поток vecOfThreads[0] joinable(), но не готов к работе join() ed
  3. Это будет оператор else из 2). Если поток равен joinable() и не будет ждать до join(), тогда go вперед и join()
#include <iostream>
#include <chrono> // std::chrono::microseconds
#include <thread> // std::this_thread::sleep_for
#include <vector>

void f1();

void f1() {
    std::this_thread::sleep_for(std::chrono::seconds {3});
    std::cout << "DONE SLEEPING!" << std::endl;
}

int main() {
    int processor_count = 2;  // consider that this CPU has two processors
    std::vector<std::thread> vecOfThreads(processor_count);

    std::thread t1(f1);
    vecOfThreads[0] = std::move(t1);

    if (vecOfThreads[0].joinable()) {  // how to check to see if vecOfThreads[1] would be good to start a process on?
        std::cout << "this is joinable, but not yet ready to be joined \n";
        std::cout << "How to know: \n \t 1) if the thread is not being used "
                     "\n \t 2) if the thread is in use, but not yet ready to be `join()`ed \n \t "
                     "3) if the thread is both joinable and will not wait for a join()" << std::endl;
        vecOfThreads[0].join();
    }

    return 0;
}

Компилировать с

g++ -std=c++17 -pthread

, я бы хотел бы иметь возможность отправлять, скажем, 12 задач, но у меня есть только 2 потока. Я хочу, чтобы новая задача была отправлена ​​сразу же, когда один из потоков завершится sh. Возможно ли это?

Спасибо за ваше время.

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