系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當前位置:系統(tǒng)之家 > IT快訊 > 詳細頁面

C++20協(xié)程實驗性支持已合并到GCC 10

編輯:jiayuan 2020-01-29 11:38:58 來源于:IT之家

  協(xié)程(Coroutines)是C++20的主要功能之一,它允許某個函數(shù)在暫停執(zhí)行之后再恢復。而從新近曝光的GCC項目的郵件列表記錄來看,對C++20協(xié)程的實驗性支持目前已經(jīng)被合并到GCC 10編譯器中!下面讓我們來了解一下。

C++20協(xié)程實驗性支持已合并到GCC 10

  據(jù)悉,官方對協(xié)程的定義是:

  A coroutine is a function that can suspend execution to be resumed later.

  協(xié)程是能暫停執(zhí)行以在之后恢復的函數(shù)。

  若函數(shù)的定義實現(xiàn)了以下任何內(nèi)容之一,則它是協(xié)程:

  • 使用 co_await 運算符暫停執(zhí)行,直至恢復

  1. 01  task《》 tcp_echo_server() {
  2. 02  char
  3. 03  data[
  4. 04  1024
  5. 05 。;
  6. 06  for (;;) {
  7. 07  size_t n = co_await socket.async_read_some(buffer(data));
  8. 08  co_await async_write(socket, buffer(data, n));
  9. 09  }
  10. 10  }
復制代碼
  task《》 tcp_echo_server() {   char   data[   1024   ];   for (;;) {   size_t n = co_await socket.async_read_some(buffer(data));   co_await async_write(socket, buffer(data, n));   }   }

  • 使用關鍵詞 co_yield 暫停執(zhí)行并返回一個值

  1. 01  generator《
  2. 02  int
  3. 03  》 iota(
  4. 04  int
  5. 05  n =
  6. 06  0
  7. 07 。 {
  8. 08  while
  9. 09  (
  10. 10  true
  11. 11 。
  12. 12  co_yield n++;
  13. 13  }
復制代碼
  generator《   int   》 iota(   int   n =   0  。 {   while   (   true  。   co_yield n++;   }

  使用關鍵詞 co_return 完成執(zhí)行并返回一個值

  1. 01  lazy《
  2. 02  int
  3. 03  》 f() {
  4. 04  co_return
  5. 05  7
  6. 06  ;
  7. 07  }
復制代碼
  lazy《   int   》 f() {   co_return   7   ;   }

  據(jù)了解,對協(xié)程支持的開發(fā)工作已進行了數(shù)月,現(xiàn)在作為GCC 10最新增添的功能,尚屬實驗性的實現(xiàn)。

  由于此功能處于早期狀態(tài)以及在GCC 10開發(fā)周期的后期階段才被添加進來,C++20協(xié)程在 -std=c++2a 中也不會公開,而且現(xiàn)在明確要求設置 -fcoroutines 標志方可使用。

  另外,根據(jù)GCC對 C++標準的支持情況頁面,GCC還會支持C++的原子操作(atomic compare-and-exchange),完成即時函數(shù)( immediate functions)的工作,獲得對 C++ modules的支持以及其他功能。不過由于GCC 10已經(jīng)處于第四階段的開發(fā)周期中,因此直到明年在 GCC 11上才可以在此編譯器中看到完整的、可投入生產(chǎn)環(huán)境使用的 C++20支持。

標簽 gcc

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

掃碼關注
掃碼關注

官方交流群 軟件收錄