亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

Visual C++本地并行編程中的狀態管理

2020-05-23 14:24:36
字體:
來源:轉載
供稿:網友

任務組取消

  新的Beta1 PPL的其中一個功能就是可以取消正在運行中的任務組。在task_group類型上加入run 和 wait方法是一個新的cancel方法。還有一個相應的is_canceling方法讓你可以檢查在進程中是否完成取消。task_group_status列舉也有一個新的值叫做canceled,讓你檢查取消是否發生。以下的代碼展示了這些新的功能:

  //declare tasks and run tasks

  task_group tg;

  tg.run(([]{printf("consoleWrite0/n");}));

  tg.run(([]{printf("consoleWrite1/n");}));

  //cancel tasks   tg.cancel();

  //check whether tasks are being cancelled

  bool taskGroupIsCanceling = tg.is_canceling();

  //check on status of task group

  task_group_status status = tg.wait();

  if (status == completed){

  printf("Tasks were completed successfully/n");

  }

  else if (status == canceled){

  printf("Tasks were canceled during task execution/n");

  }

  else{

  printf("An exception occured during task execution/n");

  }

  Combinable 類型

  達到并行執行編程任務的最大利益的有效形式之一是工作在本地拷貝或是子數據上的每一個并行分支被處理,然后當處理結束后,將結果合并。這個形式可以最大限度的減少資源爭用,而且減少潛在的死鎖和當并行線程試圖更新相同的內存位置時所發生的數據不一致的問題。

  使用這個形式沒有那么復雜,但是需要很乏味的為每一個使用進行手動編碼。為了簡化形式使用,Visual C++ 2010 Beta 1 添加了combinable模版類型。這個模版參數傳遞到combinable是每個任務將要操作的對象類型。這個類型必須有一個默認的構造器和一個拷貝構造器。通過使用local方法,每個任務訪問它自己的combinable管理資源的拷貝。 當所有任務結束后,通過使用combine 或是 combine_each方法,你可以將所有結果合并到一個結果集中。

  以下的代碼用三個獨立的任務添加一些元素給一個矢量,然后用兩個合并的方法將結果合并成一個矢量。

  //declare a combinable vector of integers

  combinable< vector< int>> v;

  //add an element to the vector using three separate tasks

  parallel_invoke(   [&]{ v.local().push_back(1); },

  [&]{ v.local().push_back(2); },

  [&]{ v.local().push_back(3); }

  );

  //merge the task-local copies using combine_each

  vector< int> result1;

  v.combine_each(

  [&](vector< int>& local)

  {

  result1.insert(result1.end(),

  local.begin(), local.end());

  }

  );

  //merge the task-local copies using combine

  vector< int> result2 = v.combine(

  [](vector< int> left, vector< int> right)->vector< int>{

  left.insert(left.end(), right.begin(), right.end());

  return left;

  });

  要注意的是在最后一行的代碼語句中的lambda表達式的明確返回類型聲明的使用。在lambda表達式中的兩個語句阻止編譯器正確推斷返回類型,所以需要手動聲明。

  也可以為沒有默認構造器(或是在很多情況下默認構造器的使用是不合適的)的類型使用combinable,通過使用combinable構造器,它是采用了一個發生器功能創建了一些模版參數類型的對象。上面代碼的前面幾行是使用超載發生器構造器而重新編寫的。在這種情況下,發生器功能返回已經包含一個元素的矢量。

  //declare a combinable vector of integers

  inable< vector< int>> v([]{return vector< int>(1, 0);});

  同步

  Combinable的使用取決于不需要作用在其他任務上的結果的任務。在多重任務的情況下需要分享一個對象,你必須使用更傳統的同步策略。PLL本身帶有三個同步原語——critical_section, reader_writer_lock 和 event。critical_section鎖住內存位置防止沒有鎖的所有任務的訪問。對于內存位置將有很多同時讀取者和少數編寫者,更優化的reader_writer_lock是可用的,允許多重讀取者獲取鎖并同時訪問內存位置。最后的原語是event,用于在任務和線程之間發信號。

  同步原語在concrt.h標題文件(是PPL的基本標題文件,包含在ppl.h中)中被定義。在concrt.h中定義的大多數類型的目標是圖書館作者,而不是應用程序的開發者,但是任何對深層并行開發感興趣的人都可以自由的調查和使用恰當的來自暴露在外的類型的功能。

  critical_section類型的API是非常簡單的;你使用一個blocking lock方法來獲取這個鎖,non-blocking try_lock會試圖去獲取這個鎖,如果它可用的話,而且unlock會釋放一個鎖住的critical_section。

  reader_writer_lock是有一點點的復雜。它添加了兩個方法,lock_read 和try_lock_read,可以支持獲取一個reader lock。Unlock方法和critical_section是一樣的,而且將釋放恰當的基于鎖類型的鎖。

  最后的同步原語是event,這是手動復位事件(即:事件保持設置直到用外部代碼進行手動復位)。代碼可以通過調用實例wait方法(也是支持一個可選的timeout值),等待一個單一事件被設置。當沒有timeout被定義的時候,等待的時間是無限的。你可以等待多重事件,通過使用靜態wait_for_multiple,它接受C-style的event pointers。wait_for_multiple方法等待一個單一事件或是所有的事件傳遞到方法調用。以下的代碼等待這兩個事件被設置:

  event* events[2];

  events[0] = new event();

  events[1] = new event();

  parallel_invoke(

  [&]{ events[0]->set(); },

  [&]{ events[1]->set(); }

  );

  bool waitForAllEvents = true;

  event::wait_for_multiple(events, 2, waitForAllEvents);

  當同時執行很多任務的時候,處理狀態管理是非常艱巨的工作。PPL提供對狀態管理的一種形式的支持,就是每個線程在本地版本的分享對象上進行操作,在程序結束的時候將這些結果合并起來。對于分離狀態管理的情況是不恰當的,PPL以critical_section, reader_writer_lock 和 event的形式提供傳統的同步原語。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲在线| 中日韩美女免费视频网站在线观看| 久久免费高清视频| 68精品久久久久久欧美| 日韩精品免费一线在线观看| 日本成人激情视频| 国产精品成人一区二区三区吃奶| 国产欧美精品在线| 亚洲视频在线观看免费| 国产一区二区三区视频在线观看| 欧美男插女视频| 日韩欧美成人区| 日韩电影在线观看中文字幕| 日本欧美中文字幕| 国产中文欧美精品| 成人国产精品久久久久久亚洲| 亚洲精品456在线播放狼人| 91精品视频免费观看| 91久久精品国产| 国产欧美日韩专区发布| 国产精品视频久久久| 中文综合在线观看| 国产精品久久久久不卡| 亚洲free性xxxx护士hd| 日韩电影中文 亚洲精品乱码| 免费99精品国产自在在线| 蜜臀久久99精品久久久久久宅男| www国产精品com| 色午夜这里只有精品| 欧美另类极品videosbest最新版本| 亚洲精品国偷自产在线99热| 日本一区二区三区在线播放| 成人av资源在线播放| 欧美午夜视频一区二区| 亚洲欧洲在线播放| 欧美大尺度电影在线观看| 亚洲欧美在线x视频| 91精品啪在线观看麻豆免费| 亚洲一区二区少妇| 亚洲福利精品在线| 国内精品久久久久影院优| 成人免费在线网址| 日本免费久久高清视频| 国产免费亚洲高清| 精品亚洲一区二区| 亚洲精品之草原avav久久| 97在线免费观看视频| 国产国语刺激对白av不卡| 国产精品永久免费视频| 青青草原一区二区| 成人免费观看网址| 欧洲s码亚洲m码精品一区| 伦伦影院午夜日韩欧美限制| 国产69精品久久久| 国模视频一区二区| 日产精品99久久久久久| 国产精品第一区| 亚洲无av在线中文字幕| 亚洲最新av在线网站| 午夜精品蜜臀一区二区三区免费| 日本免费久久高清视频| 亚洲春色另类小说| 国产一区欧美二区三区| 欧美在线一区二区三区四| 亚洲欧洲黄色网| 成人动漫网站在线观看| 久久精品久久久久久国产 免费| 中文亚洲视频在线| 91精品国产亚洲| 国产一区二区黑人欧美xxxx| 亚洲摸下面视频| 伊人久久大香线蕉av一区二区| 国产精品私拍pans大尺度在线| 亚洲免费福利视频| 91精品久久久久久久久久入口| 成人中文字幕在线观看| 亚洲精品女av网站| 日韩视频在线免费| 久久久国产精品x99av| 欲色天天网综合久久| 国模私拍视频一区| 国产91免费看片| 96pao国产成视频永久免费| 91精品在线国产| 国产精品视频yy9099| 日韩视频第一页| 亚洲女同性videos| 日韩精品亚洲视频| 久久久久www| 久色乳综合思思在线视频| 亚洲人成电影网站色xx| 午夜精品久久久久久久男人的天堂| 热久久美女精品天天吊色| 亚洲色图色老头| 欧美性xxxx极品hd满灌| 国产精品福利网| 美日韩精品视频免费看| 国产精品久久久久久久av电影| 久久乐国产精品| 一个色综合导航| 91国在线精品国内播放| 日韩亚洲成人av在线| 亚洲成人免费在线视频| 92版电视剧仙鹤神针在线观看| 一本大道久久加勒比香蕉| 热99久久精品| 久久久国产精品亚洲一区| 色哟哟亚洲精品一区二区| 久久精品一本久久99精品| 在线视频日本亚洲性| 91视频8mav| 日韩免费不卡av| 成人情趣片在线观看免费| 最近2019中文字幕第三页视频| 精品久久久久久久大神国产| 欧美福利视频在线| 亚洲成在人线av| 91中文在线观看| 亚洲一区二区三区香蕉| 亚洲精品国产精品自产a区红杏吧| 狠狠躁夜夜躁人人躁婷婷91| 久久av在线播放| 欧美极品第一页| 欧美激情一级精品国产| 国产欧美欧洲在线观看| 亚洲一区精品电影| 姬川优奈aav一区二区| 国产精品自在线| 福利视频导航一区| 热门国产精品亚洲第一区在线| 久久免费精品视频| 超碰精品一区二区三区乱码| 久久精品99国产精品酒店日本| 精品一区二区三区三区| 日本亚洲欧美成人| 成人精品视频99在线观看免费| 国产亚洲精品成人av久久ww| 亚洲免费成人av电影| 韩国一区二区电影| 亚洲美女自拍视频| 51视频国产精品一区二区| 亚洲精品日韩激情在线电影| 国产日韩欧美日韩大片| 国产精品视频在线播放| 国产精品永久在线| 色先锋资源久久综合5566| 亚洲片国产一区一级在线观看| 自拍偷拍免费精品| 欧美日韩国产二区| 欧美成人一区在线| 欧美日韩国产精品| 粗暴蹂躏中文一区二区三区| 国产日韩欧美夫妻视频在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 国产成人精品午夜| 国产精品网址在线| 亚洲国产欧美日韩精品| 国产一区二区三区视频免费| 国产精品午夜国产小视频| 国产成人精品视| 成人久久18免费网站图片| 亚洲精品电影网站| 久久精品电影一区二区| 日韩网站免费观看|