Re: эффективная реализация thread pool
От: lpd Черногория  
Дата: 17.05.18 06:49
Оценка:
Здравствуйте, barney, Вы писали:

B>для этого work1 нужно не просто разместить в очереди до work2

B>а и гарантировать что поток, исполняющий work1 закончится до того, как другой поток возьмется за work2
B>Возможно тут нужны некие барьеры

Барьеры тут не очень нужны. Можно построить логику на условной переменной и проверке условий при выборе следующей задачи для исполнения.

B>3) Как вообще делаются барьеры?

B>т.е чтобы был некий dispatch_barrier() который заставит все задиспатченные ранее Work выполниться до него гарантированно,
B>при этом сохранив возможность после него делать новые dispatch() просто добавляя новые Work в очередь

Барьер это отдельный примитив синхронизации, который используется, например, в MPI на кластерах.

B>2) Как эффективно передается Work между потоками?

B>Я так понимаю, что все thread используют общую память т.е. нет никакой нужды ничего никуда копировать? Или как?
Память потоков общая, хотя может быть еще свой TLS(Thread Local Storage).
B>Будет ли эффективной передача std::function по значению?
Здесь это заметным образом не повлияет не на что.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 17.05.2018 6:51 lpd . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.