專用的基本數據類型:ios
char signed char unsigned char short unsigned short int unsigned int long unsigned long long long unsigned long long char16_t char32_t wchar_t extended integral types (if any)
附加的成員函數:segmentfault
atomic::fetch_add atomic::fetch_sub atomic::fetch_and atomic::fetch_or atomic::fetch_xor atomic::operator++ atomic::operator-- operator (comp. assign.)
原子操做還部分專用於指針類型,具備一下附加成員函數:異步
atomic::fetch_add atomic::fetch_sub atomic::operator++ atomic::operator-- operator (comp. assign.)
std::asyncasync
enum class launch : /* unspecified */ { async = /* unspecified */, deferred = /* unspecified */, /* implementation-defined */ };
#include <iostream> #include <future> #include <thread> using namespace std; bool async_func () { cout << "async_func begin " << std::this_thread::get_id() << endl; cout << "async_func end" << endl; return true; } int main () { cout << "main begin " << std::this_thread::get_id() << endl; std::future<bool> fut = std::async (launch::async, async_func); // 建立新線程並調用線程入口函數 cout << fut.get() << endl; cout << "main end" << endl; return 0; }
輸出:函數
main begin 1 async_func begin 2 async_func end 1 main end
#include <iostream> #include <future> #include <thread> using namespace std; bool async_func () { cout << "async_func begin " << std::this_thread::get_id() << endl; cout << "async_func end" << endl; return true; } int main () { cout << "main begin " << std::this_thread::get_id() << endl; std::future<bool> fut = std::async (launch::deferred, async_func); if (fut.wait_for(std::chrono::microseconds(0)) == std::future_status::deferred) // 檢查是不是 launch::deferred { cout << "std::future_status::deferred" << endl; } cout << fut.get() << endl; // 入口函數被調用 cout << "main end" << endl; return 0; }
輸出:[注意兩處打印的線程id]fetch
main begin 1 std::future_status::deferred async_func begin 1 async_func end 1 main end
std::future<bool> fut = std::async (launch::async|launch::deferred, async_func); == std::future<bool> fut = std::async (async_func);