Проектирование пула потоковC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проектирование пула потоков

Сообщение Anonymous »

У меня вопрос по поводу пула потоков. Рассмотрим следующий код:

Код: Выделить всё

int main() {
auto po = std::execution::par_unseq;

// If Parallel STL uses TBB as the backend, I think the thread pool
//   is created during the first time for_each() being called.
std::for_each(po, begin, end, unaryFun);
// Worker threads are put to sleep.

// ... Other things are done by the main thread.

std::for_each(po, begin, end, unaryFun); // Threads wake up and run again.

// ... Other things are done by the main thread.

} // Right before going out of scope, how does the thread pool know to destruct
//     itself ?
У TBB однажды возникла проблема с утечкой памяти. C++: утечка памяти в tbb. Всякий раз, когда я компилировал свою программу с помощью дезинфицирующих средств, мне приходилось устанавливать экспорт ASAN_OPTIONS=alloc_dealloc_mismatch=0, чтобы избежать сбоя. Я всегда думал, что проблема с утечками связана именно с тем, что пул потоков не удаляется за пределами области действия.
Однако в более новой версии oneTBB больше нет этой проблемы. Как они это решили? Я не думаю, что ответ настолько глуп, как то, что пул потоков создается и разрушается внутри каждого вызова for_each(). Как пул потоков узнает, что нужно уничтожить себя, выйдя за пределы области действия? Хочу применить такой дизайн и к некоторым другим конструкциям.
Большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... ool-design
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»