2

基本上我正在开发一个opencv应用程序。 已经with_tbbcmake.

我想使用 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()在另一个线程上运行?

4

1 回答 1

4

英特尔 TBB 并非旨在用于此类目的。引用教程

英特尔® 线程构建模块以线程为目标,以提高性能。大多数通用线程包支持许多不同类型的线程,例如图形用户界面中的异步事件线程。因此,通用包往往是提供基础的低级工具,而不是解决方案。相反,英特尔® 线程构建模块专注于并行化计算密集型工作的特定目标,提供更高级别、更简单的解决方案。

boost::thread您可以使用C++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();

请记住同步对任何共享变量的访问。

于 2012-07-19T16:00:40.173 回答