<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # async() async()函數是一個簡單任務的”啟動”(launcher)函數,它是本FAQ中唯一一個尚未在標準草案中投票通過的特性。我希望它能在調和兩個略微不同的意見之后最終于10月份獲得通過(記得隨時騷擾你那邊的投票委員,一定要為它投票啊?)。 下邊是一種優于傳統的線程+鎖的并發編程方法示例(譯注:山寨map-reduce哦): ``` template<class T,class V> struct Accum { // 簡單的積函數對象 T* b; T* e; V val; Accum(T* bb, T* ee, const V& v) : b{bb}, e{ee}, val{vv} {} V operator() () { return std::accumulate(b,e,val); } }; void comp(vector<double>& v) // 如果v夠大,則產生很多任務 { if (v.size()<10000) return std::accumulate(v.begin(),v.end(),0.0); auto f0 {async(Accum{&v[0],&v[v.size()/4],0.0})}; auto f1 {async(Accum{&v[v.size()/4],&v[v.size()/2],0.0})}; auto f2 {async(Accum{&v[v.size()/2],&v[v.size()*3/4],0.0})}; auto f3 {async(Accum{&v[v.size()*3/4],&v[v.size()],0.0})}; return f0.get()+f1.get()+f2.get()+f3.get(); } ``` 盡管這只是一個簡單的并發編程示例(留意其中的”magic number“),不過我們可沒有使用線程,鎖,緩沖區等概念。f*變量的類型(即async()的返回值)是”std::future”類型。future.get()表示如果有必要的話則等待相應的線程(std::thread)運行結束。async的工作是根據需要來啟動新線程,而future的工作則是等待新線程運行結束。”簡單性”是async/future設計中最重視的一個方面;future一般也可以和線程一起使用,不過不要使用async()來啟動類似I/O操作,操作互斥體(mutex),多任務交互操作等復雜任務。async()背后的理念和range-for statement很類似:簡單事兒簡單做,把復雜的事情留給一般的通用機制來搞定吧。 async()可以啟動一個新線程或者復用一個它認為合適的已有線程(非調用線程即可)(譯注:語義上并發即可,不關心具體的調度策略。和go語義中的goroutines有點像)。后者從用戶視角看更有效一些(只對簡單任務而言)。 參考: * Standard: ??? * Lawrence Crowl: [An Asynchronous Call for C++](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2889.html). N2889 = 09-0079. * Herb Sutter : [A simple async()](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2901.pdf) N2901 = 09-0091 . (翻譯:interma)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看