У меня есть три проблемы с прикрепленным кодом, который связан с потоками. Мне нужно выполнить вызовы функций, чтобы предоставить информацию о следующих трех элементах:
- Поток
vecOfThreads[1]
пуст без каких-либо текущих задач - Поток
vecOfThreads[0]
joinable()
, но не готов к работе join()
ed - Это будет оператор 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. Возможно ли это?
Спасибо за ваше время.