портирование должно быть достаточно простым:
У меня много тем большую часть времени.
работает то же самое с разными
параметры,
создать необходимое количество потоков с функтором, который связывает ваши различные параметры, например:
boost::thread thr1(boost::bind(your_thread_func, arg1, arg2));
Все темы разделяют область памяти
называется «критическая память» (массив)
здесь ничего особенного, просто используйте boost :: mutex для синхронизации доступа (или другой тип мьютекса, если у вас есть особые требования)
Синхронизация должна быть сделана с
«барьер» на определенной итерации
использовать boost::barrier
: http://www.boost.org/doc/libs/1_45_0/doc/html/thread/synchronization.html#thread.synchronization.barriers
requires highest parallelization if possible i.e good scheduling with same priority for all threads ( currently I let CPU does the job, but I find out that boost has threadpool with thread.schedule() not sure if i should use )
CPU? возможно вы имели ввиду планировщик ОС. это самое простое решение, которое в большинстве случаев удовлетворительное. Threadpool не является частью Boost и я не знаком с этим. boost thread
не имеет планировщика.
Я ничего не знаю о вашей задаче и ее потенциале распараллеливания, поэтому я предполагаю, что она может быть распараллелена на большее количество потоков, чем у вас есть ядра. теоретически, чтобы получить максимальную производительность, вам нужно плавно распределить вашу работу по числу потоков = числу ваших ядер (включая виртуальные). это не самая простая задача, и вы можете использовать готовые решения. например Intel Threading Building Blocks (лицензия GPL) или даже Boost Asio . Несмотря на то, что основным назначением является сетевое взаимодействие, у Asio есть диспетчер, и вы можете использовать его в качестве пула потоков. Просто создайте оптимальное количество потоков (количество ядер?), Добавьте объект boost :: asio :: io_service и запустите его из всех потоков. опубликовать работу в пуле потоков с помощью io_service :: post ()