Intel TBB запускает функцию в параллельном потоке?

В основном я разрабатываю приложение opencv. Я создал параметр OpenCV with_tbb в cmake.

Я хотел бы использовать intel tbb для запуска параллельного потока, который через определенные промежутки времени обновляет некоторые глобальные переменные. Что-то типа:

vector<int> mySharedVar;

void secondaryThreadFunction() {
 while(true) {
   Do some operations
   And update mySharedVar if necessarily  

   usleep(1000);
 }
}

int main() {
   run in parallel secondaryThreadFunction;

   in the master Thread keep doing something based on mySharedVar

   while(true) {
    do something;
   }
}

Как я могу запустить secondaryThreadFunction() в другом потоке?


person dynamic    schedule 19.07.2012    source источник


Ответы (1)


Intel TBB не предназначен для использования в таких целях. Цитата из учебника:

Блоки Intel® Threading Building Blocks ориентированы на многопоточность для повышения производительности. Большинство пакетов многопоточной обработки общего назначения поддерживают множество различных типов потоковой передачи, например, многопоточность для асинхронных событий в графических пользовательских интерфейсах. В результате пакеты общего назначения, как правило, представляют собой низкоуровневые инструменты, обеспечивающие основу, а не решение. Вместо этого Intel® Threading Building Blocks фокусируется на конкретной цели распараллеливания интенсивной вычислительной работы, предоставляя более простые решения более высокого уровня.

То, что вы хотите сделать, может быть легко достигнуто с помощью функций потоковой передачи boost::thread или С++ 11:

   // using async
   auto fut = std::async(std::launch::async, secondaryThreadFunction);
   // using threads (for boost, just replace std with boost)
   std::thread async_thread(secondaryThreadFunction);

   in the master Thread keep doing something based on mySharedVar

   while(true) {
    do something;
   }

   // in case of using threads
   async_thread.join();

Не забудьте синхронизировать доступ к любым общим переменным.

person Stephan Dollberg    schedule 19.07.2012