int main() {
ThreadPool pool;
pool.startAllThreads(3);
for(;) {}
}
Код реализует механизм пула потоков. Содаётся Объект ThreadPool, который раздаёт задания созданным тредам.
Как я понимаю общий принцип работы такой:
— создаётся процесс main()
— он создаёт нужное количество тредов
— main становится в бесконечный цикл
while (true) {
— каждый тред запрашивает у ThreadPool задание
— когда задание выполненно запрашивается следующее
}
Но при этом непонятно:
1) если main выполняет цикл for(;) {}, то как же он при этом отвечает на запросы тредов? я не могу понять как будет выглядеть общая картина взаимодействия потоков и процесса.
2) Разве объект m_taskQueue при этом будет корректно отрабатывать запросы? Или нужно блочить очередь заданий через мьютексы или другие примитивы синхронизации?
3) А как грамотно сделать блокировку потока в среде Win?
4) При блокировке треда что с ним происходит? Ему системно выставляется какой то статус?
Есть некоторая специфика всего механизма пула потоков из-за которой приходится писать это самому, а не использовать какие то готовые решения (правда толковых я не нашёл, поэтому если у кого то есть что то подходящее с удовольствием изучу).