C 11 基礎之多執行緒二

2021-10-04 19:12:02 字數 1380 閱讀 9262

#include void test_pro(promise&p)

void test_future()

此處獲取非同步操作結果使用的是get,當然還有wait以及wait_for。

函式原型:

template< class rep, class period > 

std::future_status wait_for( const std::chrono::duration& timeout_duration ) const;

阻塞至結果變得可用,或者阻塞至經過指定的timeout_duration,返回值鑑別結果的狀態。

引數timeout_duration是阻塞的最大時長。

返回結果有三種狀態:

void test_wait_for());

std::cout << "waiting...\n";

std::future_status status;

do } while (status != std::future_status::ready);

std::cout << "result is " << future.get() << '\n';

}

package_task包裝了乙個可呼叫物件,允許非同步獲取該可呼叫物件產生的結果。package_task將其包裝的可呼叫物件的執行結果傳遞給乙個future物件。

c++中可呼叫物件:函式、函式指標、lambda表示式、過載了函式呼叫運算子的函式物件類以及bind建立的物件。

int addone(int x)

void test_package_task()

async可以建立非同步任務,並且將其執行結果儲存在future中,我們可以在外面從future中取值。

async原型:async(std::launch::async | std::launch::deferred, f, args...)

第乙個引數是執行緒建立策略:

第二個引數是執行緒要執行的函式,之後的引數是往執行緒執行函式中傳遞的引數。

void test_async());

//策略2

std::futurefut2 = std::async(std::launch::deferred, () );

std::cout << "result:" << fut.get() << std::endl;

this_thread::sleep_for(chrono::milliseconds(2000));

std::cout << "result:" << fut2.get() << std::endl;

}

C 11之多執行緒 unique lock詳解

目錄 1.unique lock取代lock guard 2.unique lock的第二個引數 2.1 std adopt lock 2.2 std try to lock 2.3 std defer lock 3.unique lock的成員函式 3.1 lock 加鎖 3.2 unlock 解...

C 11 多執行緒 執行緒管理基礎

c 11 所有的執行緒都封裝在標頭檔案中,使用命名空間std說明。最簡單的例子 include include void hello intmain 每個執行緒都必須有乙個初始函式,新執行緒在函式中執行。join 的作用是等待執行緒執行完畢,然後向下執行。該例子中,如果沒有join,那麼可能出現主線...

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...