Visual C++本地并行编程中的状态管理

2020-01-06 12:36:01王旭

  else if (status == canceled){

  printf("Tasks were canceled during task executionn");

  }

  else{

  printf("An exception occured during task executionn");

  }

  Combinable 类型

  达到并行执行编程任务的最大利益的有效形式之一是工作在本地拷贝或是子数据上的每一个并行分支被处理,然后当处理结束后,将结果合并。这个形式可以最大限度的减少资源争用,而且减少潜在的死锁和当并行线程试图更新相同的内存位置时所发生的数据不一致的问题。

  使用这个形式没有那么复杂,但是需要很乏味的为每一个使用进行手动编码。为了简化形式使用,Visual C++ 2010 Beta 1 添加了combinable模版类型。这个模版参数传递到combinable是每个任务将要操作的对象类型。这个类型必须有一个默认的构造器和一个拷贝构造器。通过使用local方法,每个任务访问它自己的combinable管理资源的拷贝。 当所有任务结束后,通过使用combine 或是 combine_each方法,你可以将所有结果合并到一个结果集中。

  以下的代码用三个独立的任务添加一些元素给一个矢量,然后用两个合并的方法将结果合并成一个矢量。

  //declare a combinable vector of integers

  combinable< vector< int>> v;