я хотел бы написать boost::thread_group. Предполагая, что я правильно понял, что такое обратный вызов в потоке, я хотел бы применить его и в своей программе.
Я нашел следующий пример: (thread_group без обратного вызова)
boost::thread_group group;
for (int i = 0; i < 15; ++i)
group.create_thread(aFunctionToExecute);
group.join_all();
Если я захочу изменить его на обратный вызов, будет ли он просто добавлять &
перед aFunctionToExecute
?
Я подумал об использовании обратного вызова для следующего случая: предположим, что у меня есть 2 ядра, а мой цикл for от 0 до 99 (100 элементов). Вместо того, чтобы открывать 100 потоков, я хотел бы открыть только 2 потока (количество ядер в этом примере), и после того, как каждый поток завершит свои вычисления с правильной переменной, он отправит что-то, что он сделал, и дождется выполнения заказа снова, пока не будут вычислены все 100 элементов.
Кто-нибудь знает пример или несколько примеров, которые я мог бы объединить, создав это?
поскольку у меня нет опыта работы с потоками, я хотел бы знать, является ли этот способ применения group_threads «правильным» способом?
Соответствует
boost::function
иboost::bind
для обратных вызовов, вы можете использовать это для функций потока, а также для любых дополнительных обратных вызовов, которые вы хотите вызвать. - person AJG85   schedule 01.07.2011