Здравствуйте, 5er, Вы писали:
5er>Здравствуйте, Olksy, Вы писали:
O>>Пожалуйста покритикуйте мою имплементацию самого самого распостраненного паттерна многопоточного программирования Boss Worker!
5er>На вскидку:
5er>Количестно тасок worker'ами не должно быть в общем случае известно заранее, 5er>т.е. боссу нужно передавать не queueBegin и queueEnd, а например объект, предоставляющий 5er>поток тасок на выполнение.
По поводу очереди [queueBegin, queueEnd), через эти два можно передать очередь данных без фактических ограничеинй, т.е. закодить её в виде потоковых итераторов.
5er>Зачем создавать все worker'ы, лучше создавать по необходимости. Например, зачем создавать 5er>сто потоков, когда с решением конкретной задачи справятся два-три.
Согласен с замечанием по поводу воркеров. В самом деле, несообразно создавать over 9000 их если тасков всего пусть будет 2.
5er>С формированием результата неочевидно. Может лучше сделать объект, 5er>принимающий поток результатов обработки. 5er>tasks >> Boss(workers) >> results.
productOutputIterator тож может представлять собой что угодно, но использует всё ту же семантику stl-итераторов.